[求助]CH376讀寫(xiě)U盤(pán)的問(wèn)題

PIC67K22單片機(jī)的硬件SPI與CH376通訊讀寫(xiě)U盤(pán),系統(tǒng)電壓3.3V。硬件連接測(cè)試,模式設(shè)定,U盤(pán)初始化都通過(guò)了。請(qǐng)問(wèn)在根目錄下新建文本文件,拋開(kāi)庫(kù)函數(shù),流程上需要先打開(kāi)根目錄嗎?請(qǐng)高手指點(diǎn)!

根目錄下創(chuàng)建文件不需要先打開(kāi)根目錄直接發(fā)送設(shè)置文件名(2FH)和創(chuàng)建文件(34H)即可創(chuàng)建,具體可以參考:CH376編程指南.PDF。


void CH376SetFileName( PUINT8 name ) /* 設(shè)置將要操作的文件的文件名 */這是網(wǎng)站上下載的程序庫(kù),一點(diǎn)沒(méi)動(dòng) { /* UINT8 i;*/ UINT8 c; #ifndef DEF_IC_V43_U//我的硬件版本小于0x43,所以直接加了下面的代碼 UINT8 s; xWriteCH376Cmd( CMD01_GET_IC_VER ); if ( xReadCH376Data( ) < 0x43 ) { if ( CH376ReadVar8( VAR_DISK_STATUS ) < DEF_DISK_READY ) { xWriteCH376Cmd( CMD10_SET_FILE_NAME ); xWriteCH376Data( 0 ); s = CH376SendCmdWaitInt( CMD0H_FILE_OPEN ); if ( s == USB_INT_SUCCESS ) { s = CH376ReadVar8( 0xCF ); if ( s ) { CH376WriteVar32( 0x4C, CH376ReadVar32( 0x4C ) + ( (UINT16)s << 8 ) ); CH376WriteVar32( 0x50, CH376ReadVar32( 0x50 ) + ( (UINT16)s << 8 ) ); CH376WriteVar32( 0x70, 0 ); } } } } #endif xWriteCH376Cmd( CMD10_SET_FILE_NAME ); /* for ( i = MAX_FILE_NAME_LEN; i != 0; -- i ) {//這個(gè)為什么注掉了,我想設(shè)置文件 名“/1111.TXT\0”,用這個(gè)循環(huán)才可以完全寫(xiě)入的呀! c = *name; xWriteCH376Data( c ); if ( c == 0 ) break; name ++; }*/ c = *name;//如果換成用這樣的方式,只能發(fā)送“/\0”,不是設(shè)置根目錄了嗎 xWriteCH376Data( c ); while ( c ) { name ++; c = *name; if ( c == DEF_SEPAR_CHAR1 || c == DEF_SEPAR_CHAR2 ) c = 0; /* 強(qiáng)行將文件名截止 */ xWriteCH376Data( c ); } xEndCH376Cmd( ); }


根目錄下創(chuàng)建文件直接調(diào)用s=CH376FileCreate("/ABC.TXT");這個(gè)函數(shù)里包含了CH376SetFileName。注意文件名需要符合8+3格式,必須大寫(xiě)。你現(xiàn)在的現(xiàn)象是什么?有無(wú)錯(cuò)誤返回值?


我直接把/ABC.TXT0發(fā)送到CH376,用被屏蔽掉的for循環(huán),遇到'/'沒(méi)停,新建文件成功了!其實(shí)剛開(kāi)始我就這樣設(shè)置文件名,只是沒(méi)加判斷固件版本的那段代碼。


屏蔽和未屏蔽的兩種方法都是可以設(shè)置文件名的,都是以\0結(jié)束循環(huán)。只是后一種while多了一種判斷if ( c == DEF_SEPAR_CHAR1 || c == DEF_SEPAR_CHAR2 ) c = 0;


#ifndef DEF_IC_V43_U//我的硬件版本小于0x43,所以直接加了下面的代碼 UINT8 s; xWriteCH376Cmd( CMD01_GET_IC_VER ); if ( xReadCH376Data( ) < 0x43 ) { if ( CH376ReadVar8( VAR_DISK_STATUS ) < DEF_DISK_READY ) { xWriteCH376Cmd( CMD10_SET_FILE_NAME ); xWriteCH376Data( 0 ); s = CH376SendCmdWaitInt( CMD0H_FILE_OPEN ); if ( s == USB_INT_SUCCESS ) { s = CH376ReadVar8( 0xCF ); if ( s ) { CH376WriteVar32( 0x4C, CH376ReadVar32( 0x4C ) + ( (UINT16)s << 8 ) ); CH376WriteVar32( 0x50, CH376ReadVar32( 0x50 ) + ( (UINT16)s << 8 ) ); CH376WriteVar32( 0x70, 0 ); } } } } #endif 請(qǐng)問(wèn)這部分代碼起什么作用,對(duì)后來(lái)向文件寫(xiě)數(shù)據(jù)有什么影響? 我新建文件后向文件寫(xiě)數(shù)據(jù),在PC上打開(kāi)是一些亂碼(ASC碼)后面加上一些空格,寫(xiě)文件的流程與( UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ) /* 以字節(jié)為單位向當(dāng)前位置寫(xiě)入數(shù)據(jù)塊 */) 函數(shù)類似


不好意思,U盤(pán)沒(méi)格式化好。沒(méi)有亂碼,只有空格。例如寫(xiě)10個(gè)'1',就是10個(gè)空格!請(qǐng)問(wèn)這應(yīng)該是哪部分程序執(zhí)行的有問(wèn)題?我沒(méi)有移植庫(kù)函數(shù),直接用基本指令進(jìn)行操作,調(diào)試程序比較亂,恕不能貼出來(lái)!


#ifndef DEF_IC_V43_U是為了兼容我們以前版本的芯片的,現(xiàn)在可以不使用。 寫(xiě)的流程按照CH376ByteWrite或者參考我們的CH376編程指南。你可以試著寫(xiě)入0x31、0x32...0x39,看看是否顯示1、2...9。


寫(xiě)入16個(gè)0x31,在電腦上打開(kāi),文件只有16個(gè)空格,寫(xiě)數(shù)據(jù)過(guò)程中中斷狀態(tài)都正常,關(guān)閉文件輸入?yún)?shù)1返回中斷狀態(tài)也正常,這樣一個(gè)寫(xiě)文件的過(guò)程就結(jié)束了對(duì)吧,拔出U盤(pán)插到電腦,打開(kāi)文件就應(yīng)該有寫(xiě)入的數(shù)據(jù),偏偏就是一堆空格!請(qǐng)問(wèn)有其他客戶遇到這種問(wèn)題嗎?


單純的向新建文本文件中以字節(jié)的方式寫(xiě)數(shù)據(jù),是否可以忽略對(duì)文件長(zhǎng)度、文件指針、簇號(hào)的操作?就像手冊(cè)中:8.4.5. 新建文件并寫(xiě)入數(shù)據(jù) ① CMD_SET_FILE_NAME 命令+CMD_FILE_CREATE 命令,新建文件 ② 多次 CMD_BYTE_WRITE 命令+CMD_WR_REQ_DATA 命令+CMD_BYTE_WR_GO 命令,寫(xiě)入數(shù)據(jù) ③ CMD_FILE_CLOSE 命令,參數(shù)是 1,關(guān)閉文件并允許自動(dòng)更新文件長(zhǎng)度

僅此而已這樣簡(jiǎn)單,我一周前就是這樣做的,一直調(diào)試到現(xiàn)在??戳耸纠绦虻牟僮饕矡o(wú)非就是這些步驟。。。。


把U盤(pán)格式化FAT32后,不論寫(xiě)入什么數(shù)據(jù),電腦上打開(kāi)全是y上面有兩個(gè)點(diǎn)的字符,數(shù)量和寫(xiě)入數(shù)據(jù)的個(gè)數(shù)相同。


新建好文件之后,可以直接以字節(jié)的方式來(lái)寫(xiě)。流程就是按照手冊(cè)上的來(lái),如果流程正確,是不是寫(xiě)入數(shù)據(jù)有誤?你可以用下面兩個(gè)語(yǔ)句試一下: for(i=0;i<10;i++) buf[i]='A'; s = CH376ByteWrite(buf,10,NULL); 另外,你可以用UltraEdit看一下寫(xiě)入數(shù)據(jù)有無(wú)問(wèn)題。


發(fā)送的數(shù)據(jù)是單一的0x31,用SPI硬件最底層的寄存器命令發(fā)送,數(shù)據(jù)之間的延時(shí)也調(diào)試過(guò)! 發(fā)現(xiàn)這個(gè)U盤(pán)被我寫(xiě)壞了,在電腦上無(wú)法向U盤(pán)里復(fù)制文件,彈出對(duì)話框提示確認(rèn)路徑等信息,格式化后也不行,再換個(gè)U盤(pán)看看!能否加下您的QQ?


U盤(pán)寫(xiě)可能你把U盤(pán)的啟動(dòng)扇區(qū)破壞掉了,還是你寫(xiě)有問(wèn)題。 另外,我們這邊不方便使用QQ,你可以發(fā)送到我的郵箱或者電話聯(lián)系(見(jiàn)簽名)。


我用UltraEdit看了,空格的十六進(jìn)制數(shù)是0x00,而y上面有兩個(gè)點(diǎn)的十六進(jìn)制是0xff,您看一下郵箱,我發(fā)了一個(gè)文件,是向2009.TXT文件中寫(xiě)0x2000個(gè)0x39的結(jié)果。文件字節(jié)數(shù)完全等于0x2000(8192),就是數(shù)據(jù)不對(duì)。而且每次執(zhí)行CMD_BYTE_WR_GO時(shí)U盤(pán)的燈閃兩下,感覺(jué)也挺正常的!


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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