CH376-SPI模式初始化磁盘错误。返回值0X2C.

我的系统是PIC18F45K22,利用SPI模式读取CH376,SDO做中断检测。

一共找了4只U盘,1只塑壳16G金士顿,1只不锈钢壳16G金士顿,1只2G纽曼,1只32M朗科。这4只U盘在我买的一块CH376模块上利用51单片机并口都速度过,没有问题。

现在我的系统这4只U盘插上后都能发现,但是只有16G的塑壳金士顿可以初始化,其他三只初始化全部错误。具体过程如下:在检测到U盘插入后,发送0X31命令,等待0.5秒左右才出现中断,发送0x22,读取的数据为0x2C。再发送0x0A,0xAB,读取数据为0x02。

请问我应该检查什么地方?单片机SPI速度我从4M调整到500k都不行。

CH376.JPG

while(1)

{

//=====================================================================================

BELL_ON;

while( CH376DiskConnect( ) != USB_INT_SUCCESS )  

{

cUsb_State = 0;

Delay_Ms(200);

}

cUsb_State = 1;

Delay_Ms(200);

BELL_OFF;

for ( i = 0; i < 100; i ++ )               //

Delay_Ms( 50 );

BELL_OFF;

cCh376_Val = CH376DiskMount( );          //初始化磁盘并检测磁盘是否就绪

BELL_ON;

if ( cCh376_Val == USB_INT_SUCCESS )    //准备好  

{

cUsb_State = 2;

break;                                          

}

else if ( cCh376_Val == ERR_DISK_DISCON )  //检测到断开,重新检测并计时

{

cUsb_State = 3;

break;  

}

if ( CH376GetDiskStatus( ) >= DEF_DISK_MOUNTED && i >= 5 )

{

cUsb_State = 4; 

break;           

}

}

BELL_ON;



正常初始化的那只U盘的波形,发0X22,返回0x14CH376-2.JPG


执行31命令的时候用示波器看下U口和376的供电电压抖动。时序上,也可以适当增加数据与数据之间的间隔(2us)。


只有登录才能回复,可以选择微信账号登录