[b]文字[/b]我向CH375發(fā)出DISK_SIZE命令后,再發(fā)出RD_USB_DATA命令,讀回來的數(shù)據(jù)怎么為0x15,請高手們告知一下。[Emot]1[/Emot]
(1)DISK_SIZE命令之前,DISK_INIT成功沒 (2)DISK_SIZE成功沒
正確的流程不是這樣的,發(fā)出DISK_SIZE命令之后會有一個中斷狀態(tài)給出,判斷成功之后在去發(fā)讀命令,然后讀數(shù)據(jù).0X15是檢測到連接中斷,這樣你在讀容量之前去獲取一下中斷狀態(tài),以便把上一個中斷狀態(tài)消除掉.再發(fā)DISK_SIZE命令.
如果DISK_INIT沒有成功,可能的情況有哪些?如果是優(yōu)盤不能識別,怎樣處理?
正確的流程不是這樣的,發(fā)出DISK_SIZE命令之后會有一個中斷狀態(tài)給出,判斷成功之后在去發(fā)讀命令,然后讀數(shù)據(jù)
我是這樣做的。
可能的情況有硬件也有軟件的問題.硬件包括供電不足,UD+上的電壓偏低等等.軟件性的問題一般來說前面的延時會有問題.你先去實驗一下,給我們一個詳細的結(jié)果這樣才好解決問題.
(1)對于出錯,一般是通過返回值來分析出錯原因,且必須知道哪一步出錯了,建議監(jiān)控每一個命令的執(zhí)行結(jié)果 (2)操作U盤需要一個流程,網(wǎng)上下載CH375EVT.ZIP,參考\PUB\MCS51C\MISCELL目錄下的示例
還有什么原因沒?查DISK_INIT也初始化成功,返回值為0X14(USB_INT_SUCCESS)。送出DISK_SIZE命令后成功返回,值為0X14,再發(fā)出RD_USB_DATA命令,返回值為0,按手冊上介紹的應(yīng)該為8。與優(yōu)盤有關(guān)系沒?
DISK_SIZE命令成功后,關(guān)于U盤容量的數(shù)據(jù)就已經(jīng)在CH375芯片內(nèi)部了,常理應(yīng)該能讀到數(shù)據(jù) (1)DISK_SIZE重試幾次,是否能有正確結(jié)果:即命令返回狀態(tài)為:0x14,且返回數(shù)據(jù)長度為8 (2)更換U盤試試
我用的430單片機,串口設(shè)置有什么特殊要求沒?前面測試結(jié)果都對,就是發(fā)出RD_USB_DATA命令,返回值始終為0,試過不同的U盤,結(jié)果都一樣。
你可以參考下面的程序試試,注意要有一定的延時
printf( "DiskSize\n" ); CH375_WR_CMD_PORT(CMD_DISK_SIZE); Delay_uS ( 2 ); //延時2us status = wait_interrupt( ); if (status == USB_INT_SUCCESS) { printf(" success :0x%02x \n",(unsigned short)status); CH375_WR_CMD_PORT(CMD_RD_USB_DATA); Delay_uS ( 2 ); len = CH375_RD_DAT_PORT( ); for (i=0;i!=len;i++) buf[i] = CH375_RD_DAT_PORT( ); printf("disk size: \n"); for(i=0;i!=len;i++) printf("0x%02x ",(unsigned short)buf[i]); printf("\n"); } else printf("disk size error: 0x%02x \n",(unsigned short)status);
len = CH375_RD_DAT_PORT( ); for (i=0;i!=len;i++) len的值是多少?我得到的返回值為0x14
通常情況下 len 的值為8字節(jié), 你得到的返回值 0x14 可能是CMD_DISK_SIZE 命令發(fā)送成功后的一個中斷狀態(tài), 你應(yīng)該在讀完這個中斷狀態(tài)之后,在發(fā)讀命令,接著在讀數(shù)據(jù),應(yīng)該才是 len 的值.
連續(xù)發(fā)送兩次RD_USB_DATA命令,讀出來的數(shù)據(jù)對了,為什么?我的延時時間應(yīng)該很夠。
在操作ch375的時候,寫命令和讀寫數(shù)據(jù)之間要有幾個uS 的延時, 也可能和你的單片機速度有關(guān).
讀兩個數(shù)據(jù)之間需要精確延時?兩個數(shù)據(jù)之間改變延時時間會得到不同的容量值,請問是什么原因造成的?