CH376芯片寫入文件扇區(qū)問題

今天拿到芯片嘗試了一下向U盤中寫文件,寫了一個TXT文檔叫做CH376.TXT。返回值什么的都是對的0x14.但是把U盤拿到電腦上一看,就發(fā)現(xiàn)沒有這個文件。而用CH376打開文件就能打開,我很納悶的打開了WINHEX看了一下扇區(qū),發(fā)現(xiàn)CH376在扇區(qū)上寫的位置不對,我U盤的邏輯扇區(qū)32768號扇區(qū)是根目錄,第三簇=32768+8,而CH376把根目錄當成了30208,第三簇=30208+8。請問各位大神,是不是U盤需要經(jīng)過特殊處理,還是說我在芯片上的使用出現(xiàn)了問題?望解答!謝謝。

程序附上,編譯環(huán)境NIOS II 12 SP1。


#include "../inc/ch376inc.h"

#include "../inc/hal.h"

#include "../inc/file_sys.h"

#include

#include

#include


UINT8 buf[64];


void host(void) {

UINT8i, s;


s = mInitCH376Host( ); ?/* 初始化CH376 */

/* 其它電路初始化 */


while ( 1 ) {

printf( "Wait Udisk/SD\n" );

while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { ?/* 檢查U盤是否連接,等待U盤插入,對于SD卡,可以由單片機直接查詢SD卡座的插拔狀態(tài)引腳 */

usleep( 1000*100 ); ?/* 沒必要頻繁查詢 */

? ? ? ? ? ? //printf("USB FAILURE\n");

}


/* 對于檢測到USB設備的,最多等待100*50mS,主要針對有些MP3太慢,對于檢測到USB設備并且連接DISK_MOUNTED的,最多等待5*50mS,主要針對DiskReady不過的 */

for ( i = 0; i < 100; i ++ ) { ?/* 最長等待時間,100*50mS */

usleep( 1000*50 );

printf( "Ready ?\n" );

s = CH376DiskMount( ); ?/* 初始化磁盤并測試磁盤是否就緒 */

if ( s == USB_INT_SUCCESS ){

printf("U_DISK INIT SUCCESS");

break; ?/* 準備好 */

}

else if ( s == ERR_DISK_DISCON ) break; ?/* 檢測到斷開,重新檢測并計時 */

if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 ) break; ?/* 有的U盤總是返回未準備好,不過可以忽略,只要其建立連接MOUNTED且嘗試5*50mS */

}

if ( s == ERR_DISK_DISCON ) { ?/* 檢測到斷開,重新檢測并計時 */

printf( "Device gone\n" );

continue;

}

if ( CH376GetDiskStatus( ) < DEF_DISK_MOUNTED ) { ?/* 未知USB設備,例如USB鍵盤、打印機等 */

printf( "Unknown device\n" );

goto UnknownUsbDevice;

}

i = CH376ReadBlock( buf ); ?/* 如果需要,可以讀取數(shù)據(jù)塊CH376_CMD_DATA.DiskMountInq,返回長度 */

if ( i == sizeof( INQUIRY_DATA ) ) { ?/* U盤的廠商和產(chǎn)品信息 */

buf[ i ] = 0;

printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr );

}

/*到這里都沒有問題,返回來的U盤信息都是對的*/

/* 創(chuàng)建原文件 */

printf( "Open\n" );

strcpy( buf, "/CH376.TXT" ); ?/* 源文件名,多級目錄下的文件名和路徑名必須復制到RAM中再處理,而根目錄或者當前目錄下的文件名可以在RAM或者ROM中 */

printf("buf:%s\n",buf);

s = CH376FileCreatePath( buf ); ?/* 新建多級目錄下的文件,支持多級目錄路徑,輸入緩沖區(qū)必須在RAM中 */

printf("s=%02x \n",(unsigned short)s );

////////////////////////////////////// 寫入

printf( "Write :" );

strcpy((char *)buf, "兄弟們那個加油哇 呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵" );

s = CH376ByteWrite( buf, strlen((const char *)buf), NULL ); /* 以字節(jié)為單位向當前位置寫入數(shù)據(jù)塊 */

printf("s=%02x \n",(unsigned short)s );

printf("close file " );

s = CH376FileClose( TRUE ); ? /* 關閉文件,對于字節(jié)讀寫建議自動更新文件長度 */

printf("s=%02x \n",(unsigned short)s );

UnknownUsbDevice:

printf( "Take out\n" );

while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { ?/* 檢查U盤是否連接,等待U盤拔出 */

usleep( 1000*100 );

}

usleep( 1000*100 );

}

}



再次感謝

附上winhex截圖,上面是根目錄扇區(qū),下面的是CH376誤當做根目錄的扇區(qū)

a.jpg

b.png



只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频