6

SDカードに問題があります。SD カードへのアクセスには、FatFs ライブラリ ver R0.10b を使用しています。

私のコード:

    // .... //
    FATFS fatfs;
    FIL plik;
    FRESULT fresult,res1,res2,res3,res4,res5;
    UINT zapisanych_bajtow = 0 , br;
    UINT zapianie_bajtow = 0;
    char * buffor = "123456789abcdef\r\n";
    unsigned short int i;

    void main(void) {

    // ... //

       res1 = f_mount(0,&fatfs); // returns FA_OK
        res2 = f_open( &plik, "f721.txt", FA_OPEN_ALWAYS | FA_WRITE ); // returns FA_OK
        if( res2 == FR_OK )
        {
                res3 = f_write( &plik, ( const void * ) buffor, 17, &zapisanych_bajtow ); // returns FR_DISK_ERR
        }

        res4 = f_close( &plik );// returns FR_DISK_ERR

        for(;;)
        {

        }
}

何が間違っているのでしょうか?

4

3 に答える 3

0

TMS を使い終えてから数年経ちますが、役に立つかもしれません。

FA_OPEN_ALWAYS  Opens the file if it is existing. If not, a new file is created.
To append data to the file, use f_lseek() function after file open in this method.

ファイルが存在しない場合は、次を使用します。

FA_CREATE_NEW   Creates a new file. The function fails 
with FR_EXIST if the file is existing.
于 2014-08-19T13:37:21.687 に答える
0

MSP430での Chan FatFs の実装でも同じ問題が発生しました。

問題の私の理由は次のとおりです。

  • xmit_datablock () 呼び出しで操作が失敗し、0 が返されました。
  • xmit_spi_multi () が失敗したため、xmit_datablock () が失敗しました。
  • xmit_spi_multi () は、バッファからバイトを送信するだけでは十分ではなかったため、失敗しました。書き込みごとに RXBUF から読み取る必要がありました。問題が修正された後の外観は次のとおりです。

        /* Block SPI transfers */
        static void xmit_spi_multi (
            const BYTE* buff,   /* Data to be sent */
            UINT cnt            /* Number of bytes to send */
            )
        {
            do {
                volatile char x; 
                UCA1TXBUF= *buff++; while(! (UCA1IFG & UCRXIFG)) ; x = UCA1RXBUF; 
                UCA1TXBUF= *buff++; while(! (UCA1IFG & UCRXIFG)) ; x = UCA1RXBUF; 
    
            } while (cnt -= 2);
        }
    

    この問題を修正する前は、UCA1TXBUF へのすべての書き込み後に UCA1RXBUF からの読み取りが行われませんでした。xmit_spi_multi() を修正した後、disk_write() の FR_DISK_ERR に関する問題は解決されました。

于 2015-03-28T23:13:47.610 に答える