[求助]讀U盤的大小怎么讀出了U盤的型號(hào)等信息??

大家好! 我在用CMD_DISK_SIZE 命令時(shí),讀出的前八字節(jié)為00 08 00 01 75 00 00 00,剩余字節(jié)為KingstonDataTraveler 2.0;

這個(gè)怎么回事???這個(gè)命令怎么讀出了這么多字節(jié)的數(shù)據(jù)?

我正在用CH375搞產(chǎn)品,USB的部分剛開始接觸,希望版主、各位網(wǎng)友指點(diǎn)。先謝謝啦。

626563298158497926.jpg

CMD_DISK_SIZE命令的反回的長度是多少?以這個(gè)長度為基準(zhǔn)讀取容量數(shù)據(jù)


你可以跟下CMD_DISK_SIZE這個(gè)命令返回的數(shù)據(jù)長度,看看是不是8個(gè)字節(jié).你在CMD_DISK_SIZE之前有沒有使用CMD_DISK_INQUIRY這個(gè)命令?如果有的話在做CMD_DISK_SIZE之前將緩沖區(qū)清空,你再去跟下程序看是否執(zhí)行該命令之后還會(huì)有你所說的上述數(shù)據(jù).


返回的數(shù)據(jù)長度盡然為:36字節(jié)。 我沒有用CMD_DISK_INQUIRY,我一直認(rèn)為我的芯片為CH375,今天看了一下發(fā)現(xiàn)是CH375A。 我的部分程序如下(先前在此板上調(diào)試設(shè)備,完成自發(fā)自收功能,然后現(xiàn)在搞主機(jī)模式): 寫命令子程序: void CH375_WriteCmd(uint8 CH375Command) { uint8 Command_Temp = CH375Command; CH375_CS=0; CH375_1Cmd_0Data = 1; CH375Port = Command_Temp; SDelay(2); CH375_Write=0; SDelay(1); CH375Disable(); } ************************************************** 寫數(shù)據(jù)子程序: void CH375_WriteData(uint8 CH375Data) { uint8 CH375Data_Temp = CH375Data; CH375_CS=0; CH375_1Cmd_0Data = 0; CH375Port = CH375Data_Temp; SDelay(2); CH375_Write=0; SDelay(1); CH375_Write=1; } ***************************************** 讀數(shù)據(jù)子程序: uint8 CH375_ReadData() { uint8 USBData; CH375Port=0XFF; CH375_CS=0; CH375_Read=0; SDelay(2); USBData=CH375Port; SDelay(1); CH375_Read=1; return USBData; } ********************************************** 獲取U盤大小子程序: void CH375_Acq_DiskSize() { CH375_WriteCmd(CMD_DISK_SIZE); while(!Disk_Ok); //等待CMD_DISK_SIZE中斷 Disk_Ok=0; USB_ReadData(); //從緩沖區(qū)讀數(shù)據(jù) } ************************************************* 緩沖區(qū)讀數(shù)據(jù)子程序: void USB_ReadData() { uint8 Count_Temp; CH375_WriteCmd(CMD_RD_USB_DATA); USBData_Len=CH375_ReadData(); //接收長度 if(USBData_Len>64) { USBData_Len=64; } UartTrans("\nDataLen:",9,0); UartTransData(USBData_Len); //串口打印長度 UartTrans("\n",1,0); for(Count_Temp=0;Count_Temp< USBData_Len;Count_Temp++) //接收數(shù)據(jù)塊 { USBBuffer[Count_Temp]=CH375_ReadData(); } USBRecFlag=1; CH375Disable(); } **************************** 打印緩沖區(qū)內(nèi)容: while(USBRecFlag) //收到數(shù)據(jù)標(biāo)志位,從串口打印 { //UartTransData('@'); USBRecFlag=0; UartTrans("Disk Size:\n",11,0); UartTrans(USBBuffer,8,0); //打印前八字節(jié) UartTrans("\nDisk Info:\n",12,0); UartTrans(USBBuffer,USBData_Len-8,8); //打印剩余字節(jié) UartTrans("\n",1,0); USBReset(); //清緩沖區(qū) SDelay(100); }


你先做DISK_INQURY命令跟下這個(gè)命令返回的數(shù)據(jù),緊跟著將數(shù)據(jù)緩沖區(qū)清除,然后再做DISK_SIZE命令,你對(duì)比下兩個(gè)命令返回的數(shù)據(jù)和長度,看你的數(shù)據(jù)來說應(yīng)該是CMD_DISK_INQURY命令返回的數(shù)據(jù).另外,你手頭上有沒有CH375B?可以的話,換成CH375B實(shí)驗(yàn)下.


另外,你是使用我們的子程序庫嗎?是的話,你可不可以將你的所使用的庫的詳細(xì)信息提供下,包括單片機(jī)型號(hào),編譯器和編譯器的版本.


我用的是自己的程序,以前不知道你們提供這些庫。 我的原先的程序有點(diǎn)問題:在執(zhí)行完CMD_DISK_INIT后沒有判斷中斷,而USB_INT_SUCCESS中斷中我將DiskOk的標(biāo)志位設(shè)為1;后面就開始執(zhí)行CMD_DISK_SIZE,我判斷此命令是否成功的依據(jù)就是DiskOk,這個(gè)被上步的命令CMD_DISK_INIT已經(jīng)置位了,所以CMD_DISK_SIZE在不知是否被CH375成功接收的情況下51開始讀數(shù)據(jù),結(jié)果出來的就是U盤的型號(hào)等信息,不知道這個(gè)是否正常?文檔中沒有說明。 現(xiàn)在將上述的Bug更改之后,發(fā)現(xiàn)CMD_DISK_SIZE返回了錯(cuò)誤的中斷狀態(tài)USB_INT_DISK_ERR;

這個(gè)該如何解決?DISK_R_SENSE 這個(gè)命令怎么使用?


建議你去下載CH375EVT這個(gè)文件包,去參考\PUB\MCS51C\MISCELL下EV0.C這個(gè)示例程序.至于你所說的DISK_R_SENSE命令是在操作U盤失敗后,你可以發(fā)該命令向設(shè)備要失敗的信息,然后對(duì)該命令進(jìn)行重試.


上述問題搞定了。呵呵

CMD_SET_PKT_P_SEC這個(gè)命令怎么在我的CH375INC。H中沒有呢?


網(wǎng)上下載CH375EVT.ZIP,查看\CH375EVT\PUB\MCS51C\INCLUDE


順便給各位網(wǎng)友說一點(diǎn): 若U盤等初始化有問題,可以更換U盤試一試,會(huì)得到意想不到的效果。

我就是被我這個(gè)Kinstone的U盤給害慘了。


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

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