[求助]CH376讀寫U盤的問題

CH376支持FAT12/16/32,那么在格式化U盤時(shí)選擇FAT或FAT32,分配單元大小選擇默認(rèn)值,都是可以的嗎?


請(qǐng)問新建文件的時(shí)候是否需要指定扇區(qū)號(hào),或者向某個(gè)文件中寫數(shù)據(jù)時(shí)是否要指向該文件的指針,文件系統(tǒng)我不太了解,不知道這樣理解對(duì)不對(duì)。我的應(yīng)用只是用基本的命令新建個(gè)TXT文件,然后就向文件中寫數(shù)據(jù),最后關(guān)閉文件。整個(gè)過程中并沒控制CH376關(guān)于扇區(qū)和指針方面的操作,CH376內(nèi)部能自動(dòng)處理嗎?感覺上我寫的數(shù)據(jù)跟文件名沒有關(guān)聯(lián)上,在計(jì)算機(jī)上打開的時(shí)候,顯示的數(shù)據(jù)并不是我所操作的扇區(qū)!


新建文件肯定需要指定扇區(qū)號(hào),但是我們CH376內(nèi)部集成了文件系統(tǒng),所以只需要通過發(fā)送相關(guān)命令來實(shí)現(xiàn)。按照流程,新建成功即可直接按照字節(jié)寫??戳四銓懭氲臄?shù)據(jù),感覺是你文件系統(tǒng)里面的數(shù)據(jù)寫進(jìn)文件中去了。很我們只支持FAT格式文件系統(tǒng)的USB存儲(chǔ)器,格式化默認(rèn)就行。


謝謝,我再看看!正用的芯片絲?。篊H376S 206255227 “看了你寫入的數(shù)據(jù),感覺是你文件系統(tǒng)里面的數(shù)據(jù)寫進(jìn)文件中去了” 您的意思是把U盤中其他文件的數(shù)據(jù)寫到了我要操作的文件中了是嗎,有這個(gè)可能,我發(fā)現(xiàn)望U盤里放點(diǎn)文件,打開我建的文件才會(huì)看到亂碼,而格式化后的U盤,我建的文件只有0x00或只有0xff(雖然數(shù)據(jù)個(gè)數(shù)是對(duì)的)。 或者是寫文件的扇區(qū)與打開文件看到的扇區(qū)不同! 為什么會(huì)有這種情況呢?


讀寫U盤那部分的程序發(fā)您郵箱里了! 今天早上又發(fā)現(xiàn)個(gè)情況,重新找個(gè)U盤,里面有些文件,格式化后,用單片機(jī)向U盤根目錄新建了2014.TXT文檔并寫入64k的單一字節(jié)0x39(9),在電腦上打開后發(fā)現(xiàn)一些亂碼,還有格式化前某個(gè)文檔中的數(shù)據(jù),格式、換行都跟原文件相同,然后又是一些亂碼,感覺就是扇區(qū)號(hào)不對(duì)!(U盤格式化不是完全清空數(shù)據(jù)嗎?)


看了你的程序,注意以下幾點(diǎn): (1)寫數(shù)據(jù)最好像讀數(shù)據(jù)ReadCH376Data()做成一個(gè)函數(shù)。 (2)中斷那塊處理的流程是,讀到中斷狀態(tài),需要發(fā)送獲取中斷狀態(tài)的命令0x22的命令來獲取中斷值并取消中斷 (3)看了你的寫函數(shù)的流程,有點(diǎn)問題在發(fā)送CMD01_WR_REQ_DATA(2DH)命令之后,應(yīng)該讀取可以往CH376數(shù)據(jù)長度。接著根據(jù)讀到的長度循環(huán)寫數(shù)據(jù);而不是你直接給0xFF況且你發(fā)送0x3C之后的數(shù)據(jù)長度是0x4000你可以先少點(diǎn)數(shù)據(jù)來測試,詳細(xì)你可以參考一下CH376編程指南。 (4)我們的函數(shù)都已經(jīng)做好了在FILE_SYS.C函數(shù)里面,你只需要修改讀寫子函數(shù)即可。 另外,U盤格式化只是將啟動(dòng)扇區(qū),F(xiàn)AT表恢復(fù)到原來的數(shù)據(jù),當(dāng)然不是清空數(shù)據(jù)。


SPI2_transfer(0x2D);//發(fā)送寫數(shù)據(jù)命令 delay(100); n=SPI2_transfer(0xFF);//讀可以寫入的數(shù)據(jù)長度0~255,目的不是發(fā)送0xff,是接收可以寫入的數(shù)據(jù)長度

硬件SPI通訊,主機(jī)模式,要想讀從機(jī)的一個(gè)字節(jié)數(shù)據(jù),是要發(fā)送8個(gè)時(shí)鐘脈沖。主機(jī)模式讀數(shù)據(jù)是要先寫數(shù)據(jù)才能在SPI緩沖區(qū)接收到從機(jī)數(shù)據(jù),與其他芯片之間的SPI通訊也是這樣做的,是可以的!

寫入的數(shù)據(jù)長度從0x0001到0xffff之間試過很多了!


printf( "Write begin\n" ); s = sprintf( buf, "此前文件長度= %ld 字節(jié)\xd\xa", CH376GetFileSize( ) ); /* 注意字符串長度不能溢出 buf,否則加大緩沖區(qū)或者分多次寫入 */

printf( "Current offset ( file point ) is %ld\n", CH376ReadVar32( VAR_CURRENT_OFFSET ) ); /* 讀取當(dāng)前文件指針 */

例子7當(dāng)中的這兩部分,是不是只是顯示信息用的,如果不執(zhí)行該代碼對(duì)文件的操作是否有影響呢? 主要是:CH376GetFileSize( )和 CH376ReadVar32( VAR_CURRENT_OFFSET )


現(xiàn)在的問題應(yīng)該是寫文件的扇區(qū)沒有跟文件名關(guān)聯(lián)上,寫的數(shù)據(jù)不知道寫哪了,這樣的問題應(yīng)該從哪方面著手來解決呢?


我們找可寫的扇區(qū)都是通過命令CH376內(nèi)部實(shí)現(xiàn)的,只要你文件打開或者創(chuàng)建成功(返回中斷狀態(tài)正確)應(yīng)該就是能夠關(guān)聯(lián)上。你自己寫的函數(shù)話流程可能會(huì)有問題,按照21樓的注意點(diǎn),結(jié)合中斷狀態(tài),只能一步一步分析。23樓的函數(shù)對(duì)寫操作是沒有影響的。


初始化的時(shí)候讀版本號(hào)返回是0x44,設(shè)置文件名之前去讀版本號(hào)返回是0x01。芯片工作過程中25和26號(hào)引腳一直是低電平?。ㄓ芯W(wǎng)友說應(yīng)該一個(gè)高一個(gè)地)SPI硬件接口有這個(gè)說法嗎?


重新移植了芯片的庫函數(shù),基本上成功了,但文件前面總是:格: ) Generic STORAGE DEVICE 0250,后面的數(shù)據(jù)是對(duì)的!感謝您的熱心幫助!


初始化完成之后CH376S的25腳應(yīng)該是低電平,你說的25和26腳一高一低應(yīng)該是CH375。 新建或者打開文件之后,你可以使用字節(jié)偏移,偏移到第0位再開始寫。


問題解決了,是因?yàn)橄葓?zhí)行了: i = CH376ReadBlock( buffer ); /* 如果需要,可以讀取數(shù)據(jù)塊CH376_CMD_DATA.DiskMountInq,返回長度 */ s = CH376DiskQuery( (PUINT32)buffer ); /* 查詢磁盤剩余空間信息,扇區(qū)數(shù) */ 改變了buffer前部分的數(shù)據(jù),現(xiàn)在完全可以了!


請(qǐng)問一下,用字節(jié)模式寫USB,寫入超過255個(gè)字節(jié)后,之后有幾個(gè)字節(jié)會(huì)亂碼,請(qǐng)問一下是什么原因


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

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