采用CH376外接U盘,MSP430单片机使用软件SPI口与CH376通信。参考CH376EVT中EXAM7的程序,在执行“if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; ”这句话时出现问题。之前的程序通过串口终端显示的都是正确的,板上的LED灯在接上U盘后也点亮了。可是这句话执行了10遍,串口终端上10次显示“Ready?”,单步调试时发现“CH376DiskMount( )”返回的值为28H(0010 1000),数据手册第7页上的错误信息表示是“数据不同步”,请问是什么意思?大概的原因是什么?谢谢!
首先保证MSP430和CH376通讯是成功的才能保证返回错误的代码是有效的。 测试命令有没有通过?
1、确认mInitCH376Host、CH376DiskConnect都成功? 2、CH376_INT_WIRE定义是否正确 3、检查一下USB口的接线次序:VCC、D-、D+、GND 4、USB口供电是否足5V
在mInitCH376Host函数中,通过单步调试 xWriteCH376Cmd( CMD11_CHECK_EXIST ); /* 测试单片机与CH376之间的通讯接口 */ xWriteCH376Data( 0x65 ); res = xReadCH376Data( ); 返回的res=0x9A,表明单片机与XH376通讯成功 xWriteCH376Cmd( CMD11_SET_USB_MODE ); /* 设置USB工作模式 */ xWriteCH376Data( 0x06 ); mDelayuS( 20 ); res = xReadCH376Data( ); 返回的res=0x51,表明CMD_RET_SUCCESS 没有设置USB_INT_WIRE,执行的是下面的语句 xWriteCH376Cmd( CMD20_SET_SDO_INT ); /* 设置SPI的SDO引脚的中断方式 */ xWriteCH376Data( 0x16 ); xWriteCH376Data( 0x90 ); /* SDO引脚在SCS片选无效时兼做中断请求输出 */ 返回USB_INT_SUCCESS,表明初始化成功,串口终端没用出现错误信息。
在CH376DiskConnect( )处 while ( CH376DiskConnect( ) != USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘插入,对于SD卡,可以由单片机直接查询SD卡座的插拔状态引脚 */ mDelaymS( 100 ); } 如果不接U盘,CH376GetIntStatus()返回的值是0x82 接上U盘,CH376GetIntStatus()返回的值是0x14,表明USB_INT_SUCCESS 然后执行下述语句 for ( s = 0; s < 10; s ++ ) { /* 最长等待时间,10*50mS */ mDelaymS( 50 ); printf( "Ready ?\n" ); if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break; /* 初始化磁盘并测试磁盘是否就绪 */ } 从开始到这,串口终端上显示 Start Wait Udisk/SD
Ready ?
Ready ?
Ready ?
Ready ?
Ready ?
Ready ?
Ready ?
Ready ?
Ready ?
Ready ?
if ( CH376DiskMount( ) == USB_INT_SUCCESS )& nbspbreak; ”这句话时出现问题。之前的程序通过串口终端显示的都是正确的,板上的LED灯在接上U盘后也点亮了。可是这句话执行了10遍,串口终端上10次显示“Ready?”,单步调试时发现“CH376DiskMount( )”返回的值为28H(0010 1000)
单片机和CH376硬件连接应该没有什么问题,主要检查一下CH376和U盘连接的那部分,USB信号线上有没有串接电阻之类的器件,如果有则全部去掉,U盘连接之后,D+应该在3V左右,D-在0V左右,U盘供电确定为5V, CH376和U盘连接的是PCB布线还是手工飞线?
(1)检查USB口的信号线有没有接反:VCC,UD-,UD+,GND (1)插上U盘后测量下USB口的VCC电压是多少,尽量不要低于4.7V. (2)换个U盘试试,看是否还是一样的现象.
USB信号线上有没有串接电阻之类的器件。 CH376和U盘连接的是手工飞线。 U盘连接之后,D+应该在3V左右,D-也在3V左右,U盘供电确定为4.85V。
D+,D-上的电压不对,检查有没有短路了?手工飞线要尽可能的短,共地要好
重新检测了一遍,没有短路。 手工飞线也很短了,4厘米不到。 外壳又添加了一根地线。 U盘连接之后,D+在3V左右,D-也在3V左右,U盘供电为4.85V。 运行显示结果: Start Wait Udisk/SD Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Open Error: 2C Write begin Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Error: B4 Current offset ( file point ) is 1396768256 Write end Close Error: B4 Take out
重新检测了一遍,没有短路。 手工飞线也很短了,4厘米不到。 外壳又添加了一根地线。 U盘连接之后,D+在3V左右,D-也在3V左右,U盘供电为4.85V。 CH376DiskMount( )这一步返回的值始终是0X28,换了几个U盘都一样。
运行显示结果: Start Wait Udisk/SD Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Ready ? Open Error: 28 Write begin Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Error: B4 Current offset ( file point ) is 1396723108 Write end Close Error: B4 Take out
你不用跑程序了,硬件是坏的。好好检查一下。D-在3V左右肯定无法通讯。 手工连接的线,可能有连接错误的地方。
仔细检测了电路,把SD卡座取下了。与CH376相连的是4排线的插座,用USB延长线的一端接PCB板上的插座,另一端接U盘。接线没有错误,1脚接5V,2脚接HC376的11脚,3脚接HC376的10脚,4脚接地。现在在示波器上看到的是: 1脚:+5V直流电源 2脚:0V上叠加峰峰值为3.3V的十几个脉宽不等的脉冲信号, 3脚:幅值为2.45V上叠加的与2脚反向的脉冲信号,但是峰峰值为1V 4脚:0V 但是CH376DiskMount( )这一步返回的值还是0X28,换了几个U盘都一样。
明白你的意思了。现在基本可以确定2脚的电平是正确的。你先不用延长线。3脚的幅值有点低了。 应该是在3V左右叠加的与2脚反向的脉冲信号。 另外建议您购买一块CH376的评估板来做下实验。硬件很稳定,价格也不贵。 相关连接: /project/usb/ch376evt.asp 导致3脚电压偏低可能是因为电源电压偏低。USB延长线质量不好,导致信号不匹配。 USB外壳要接地。
换了一个USB插座,问题都解决了。谢谢各位大侠!