和這個帖子的情況一樣 http://www.findthetime.net/bbs/thread-52889-1.html
在pc端能看到文件,但是文件名亂碼,也無法打開.
但是操作命令的結果返回都是正常的USB_INT_SUCCESS.
和這個帖子的情況一樣 http://www.findthetime.net/bbs/thread-52889-1.html
在pc端能看到文件,但是文件名亂碼,也無法打開.
但是操作命令的結果返回都是正常的USB_INT_SUCCESS.
補充 使用的SPI接口, 用FILE_SYS.C或FILE_SYS_C51.C都試過, 現象一樣.
補充: 操作U盤后,U盤的指示燈總是閃爍不停.
你的文件名是怎樣的?正常的文件名應該為大寫英文字母或者數字以及下劃線。不能為小寫英文字母。包括主文件名以及擴展名,且有固定的長度,滿足8+3格式。
文件名"/LOG.TXT", 我在論壇看了好多帖子了,修改了時鐘頻率,文件路徑,操作步驟等等. 折騰2天了還是沒解決.
以前的并口模式沒問題,這次用SPI模式就這樣了.
這是連續(xù)操作3次后的文件.
一般這種問題都是文件名的問題,與接口無關。接口只需要測試命令能過,后面操作是一樣的。你把你創(chuàng)建文件那段程序貼出來看一下。
流程:
mInitCH376Host()
CH376DiskConnect()?? ??? ??? ?
DelaymS(500);
CH376DiskMount()?? ??? ?
以上結果都是 USB_INT_SUCCESS.
讀出U盤信息 P_INQUIRY_DATA 也正常.
以下操作都返回正常,但是操作完成后U盤燈一直閃,在pc端也不能打開文件,文件名顯示亂碼.
?? ?err=CH376FileOpen("/LOG.TXT");// CH376FileCreate
?? ?if(USB_INT_SUCCESS==err)
?? ?{
?? ??? ?#if DEBUG_ENABLE
?? ??? ??? ?printf("ch376_file_open_ok! ");
?? ??? ??? ?printf("fils_size: %ld\r\n", CH376GetFileSize());?? ?
?? ??? ?#endif
?? ??? ?
?? ??? ?err=CH376ByteLocate(0xFFFFFFFF);//移到文件尾部
?? ??? ?if(USB_INT_SUCCESS==err)
?? ??? ?{
?? ??? ??? ?#if DEBUG_ENABLE
?? ??? ??? ??? ?printf("ch376_locate_file_ok!\r\n");?? ?
?? ??? ??? ?#endif
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?#if DEBUG_ENABLE
?? ??? ??? ??? ?printf("ch376_locate_file_error!\r\n");?? ?
?? ??? ??? ?#endif?? ?
?? ??? ??? ?return err;
?? ??? ?}
?? ?}
?? ?else if(ERR_MISS_FILE==err)
?? ?{
?? ??? ?err=CH376FileCreate("/LOG.TXT");//新建文件并打開
?? ??? ?if(USB_INT_SUCCESS==err)
?? ??? ?{
?? ??? ??? ?#if DEBUG_ENABLE
?? ??? ??? ??? ?printf("ch376_create_file_ok!\r\n");?? ?
?? ??? ??? ?#endif?? ?
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?#if DEBUG_ENABLE
?? ??? ??? ??? ?printf("ch376_create_file_error!\r\n");?? ?
?? ??? ??? ?#endif?? ?
?? ??? ??? ?return err;
?? ??? ?}
?? ?}
?? ?else
?? ?{
?? ??? ?#if DEBUG_ENABLE
?? ??? ??? ?printf("ch376_open_file_error!\r\n");?? ?
?? ??? ?#endif
?? ??? ?return err;//打開文件出錯
?? ?}
?? ?CH376SecLocate(0);
?? ?err=CH376ByteWrite("0123456789abcdef", 16, (u16*)&h);//以字節(jié)為單位向文件寫入數據
?? ?if(USB_INT_SUCCESS==err)
?? ?{
?? ??? ?#if DEBUG_ENABLE
?? ??? ??? ?printf("ch376_write_%d_bytes!\r\n",h);?? ?
?? ??? ?#endif
?? ?}
?? ?else
?? ?{
?? ??? ?#if DEBUG_ENABLE
?? ??? ??? ?printf("ch376_write_error!\r\n");?? ?
?? ??? ?#endif
?? ??? ?return err;
?? ?}
?? ?err=CH376ByteWrite("123", 0, NULL);//0字節(jié)寫入,以更新文件長度 */
?? ?err=CH376FileClose(TRUE);//文件關閉,以更新文件長度
?? ?if(USB_INT_SUCCESS==err)
?? ?{
?? ??? ?#if DEBUG_ENABLE
?? ??? ??? ?printf("ch376_file_close_ok!\r\n");?? ?
?? ??? ?#endif?? ?
?? ?}
?? ?else
?? ?{
?? ??? ?#if DEBUG_ENABLE
?? ??? ??? ?printf("ch376_file_close_error!\r\n");?? ?
?? ??? ?#endif
?? ??? ?return err;
?? ?}
感謝ZBin, 還以為帖子沉了呢. 都準備改硬件了.
你在寫之前不用調用CH376SecLocate(0);這個函數,另外,你可以把寫的那一部分去了,直接創(chuàng)建看看呢能否在電腦上顯示。
把CH376SecLocate到CH376ByteWrite全部去掉還是不行的.
只是創(chuàng)建/打開,然后關閉,問題一樣.
如果前面diskmount正確通過,創(chuàng)建文件不成功??赡芨鉛盤有關系,U盤格式化或者換一個U盤試一下。
ch376_disk_connect_ok!
ch376_disk_mount_ok!
協(xié)議版本: 2
UdiskInfo: Generic Flash-Disk????? 1.09
ch376_create_file_ok!
ch376_write_16_bytes!
ch376_file_close_ok!
這是我操作后返回的結果. 換了一個ch376芯片, 我把建立文件的名稱改為123.TXT, 現在在電腦上看到的文件名變成了Xt?Z2,d.Y[??? 感覺是傳輸的數據出錯了.
換了U盤, 結果如下,但是文件還是不對.? 唉, 崩潰了!
ch376_init_ok!
ch376_disk_connect_ok!
ch376_disk_mount_ok!
協(xié)議版本: 4
UdiskInfo: KingstonDataTraveler 2.08.07
ch376_file_open_ok! fils_size: 16
ch376_locate_file_ok!
ch376_write_16_bytes!
ch376_file_close_ok!
請問是因為大小端的問題嗎? 我看c51版的有大小端區(qū)分.
我們的參數都是一個字節(jié)一個字節(jié)送的,不存在大小端問題。還是你的文件名傳遞可能有問題。