我在用CH375探测U盘时候使用TEST_CONNECT命令,不连U盘时的返回值是16H即USB_INT_DISCONNECT,当U盘连上之后读出的值还是16H.就是说U盘连了等于没连,请问这是什么原因,(我用的U盘是KINGMAX的4G,格式是FAT32)谢谢.
主要检查一下中断引脚,在U盘插上之后有没有中断产生,USB信号线有没有接反.vcc,d-,d+,gnd. U盘的供电为5V.
主要检查一下中断引脚,如果没检测到低电平的话,您可以把引脚翘起来看看当插入U盘的时候有没有中断信号,另外插上盘的时候D+应该有3.3V的电压,在UD+,UD-线上不知道您有没有串接电阻?如果串了请不要大于5欧姆.
UD+上的3.3V可以检测到的,但是中断信号始终为5V,在信号线上我没有串电阻.我已经把中断线悬空了.
主机模式设置成功没?需通过命令返回值判读
主机模式设置没成功 我刚刚是把SET_USB_MODE命令写入,再让其工作在方式6,没有返回值.是不是只有设置了主机模式后,中断线才会根据U盘是否插上做出反应
流程上要求先设置主机模式,且必须成功,下载CH375EVT.ZIP,参考\CH375EVT\PUB\MCS51C\MISCELL下例程
肯定要设置主机模式,首先你要确保测试命令能过,详细参考CH375DS1,如果不过的话就说明你的硬件或者读写子函数有问题.另外如果测试命令能过但是仍然读不到数据肯能是读的状态太快,你循环读一下看是否有数据出来.
测试命令和版本号获取都可以的.比如测试时输入数据22H,则返回DDH,DDH是在数据地址里面的,而命令地址中的值是5DH.版本号的话返回在数据地址中的是0B7H,而命令地址中的是37H,前者数据地址中的值是正确的,后者命令地址中的值对,所以比较困惑,返回值应该是数据地址中,还是命令地址中. 还有就是在设置模式时候我给375一个工作于方式6的命令,返回在数据地址中是FFH,在命令地址中是7FH,U盘接不接都如此.我是单步执行的.所以应该不会是太快缘故.
(1)CH375返回的数据均是从数据口地址读取 (2)操作CH375有时序要求,命令后延时1.5uS,数据后延时0.6uS,读写脉宽>60nS,不知道你用了什么单片机,速度是多少 (3)把CH375的3个接口子程序和操作程序贴出来
用的是AT89C51 程序如下: ORG 0 CMD XDATA 0100H ;命令地址 DAT XDATA 0000H ;数据地址 CLR P3.0 MOV DPTR,#CMD MOV A,#06H MOVX @DPTR,A MOVX A,@DPTR ;读命令,未成功 MOV DPTR,#DAT MOV A,#022H MOVX @DPTR,A MOVX A,@DPTR ;读数据,成功 SETB P3.0 CLR P3.0
;版本号 MOV DPTR,#CMD MOV A,#01H MOVX @DPTR,A ;设置主机模式 MOV DPTR,#CMD MOV A,15H MOVX @DPTR,A MOV DPTR,#DAT MOV A,06H MOVX @DPTR,A MOV A,06H MOVX @DPTR,A 用此单片机是想先把375基本操作完成再将其用ARM实现,所以没用子程序
工作模式设置通常需要20uS时间完成,完成之后才能输出操作状态.
我都是用的单步执行,是不是也要延时才行
先做测试命令,也就是写命令的时候先发送0X06命令,在发送数据例如0X55,在发送完之后在读取数据,正确的话数据应该为0XAA,如果不是则有问题
测试是可行的 版本号也是可以获得的,就是工作模式弄不来,现在加延时了 返回值是B7H,不管U盘是否连接,都是这个值
MOV DPTR,#CMD ;命令口地址 MOV A,#15H MOVX @DPTR,A ;设置USB工作模式 NOP ;如果时钟频率低于16MHz则无需该指令延时 MOV DPTR,#DAT ;数据口地址 MOV A,#06H MOVX @DPTR,A ;设置为使用USB主机方式 NOP ;如果时钟频率低于16MHz则无需该指令延时 NOP ;如果时钟频率低于16MHz则无需该指令延时 CH375_INIT_WT: MOVX A,@DPTR ;返回操作状态 XRL A,#51H JNZ CH375_INIT_WT ;等待操作成功,通常需要等待10uS-20uS