stm 32 spi 模式 与ch376 通讯 检测upan连接总返回 0x30
前面的模式 usb 模式设置成6 成功了。但是总是检测不到u盘无论是否有u盘连接 总是返回0x30
stm 32 spi 模式 与ch376 通讯 检测upan连接总返回 0x30
前面的模式 usb 模式设置成6 成功了。但是总是检测不到u盘无论是否有u盘连接 总是返回0x30
发送 中断命令 22H GET_STATUS 返回22 说明 读取了dr寄存器 。那么这类输出是中断的命令该怎么读取?
SPI方式吗?把SPI时钟调慢一点,命令与数据之前加2us延时
数据命令之间间隔通过,SPI-BZ引脚控制 ,发现设置了usb 模式后 其他命令也失效了, 例如 CHECK_EXIST 也不能正常返回值了。
我们一般不使用BZ信号,保证适当的延时就可以了。其他命令失效,是不是CS上下拉没有控制好,严格按照时序图提供的波形与时间参数调整。
降低了速度 间隔延时,还是那样只有复位后第一次使用的命令有用。总觉得这芯片有问题,调了很久了没遇到这么难搞的芯片
参考SPI_SW.C中模拟SPI底层函数,直接移植过去使用,保证延时函数准确就行。
CMD_DISK_CONNECT 命令有毒啊。
char Ch376_diskConnect()
{
u8 rdata=0;
//ch376_setUsbMod(0x06);
CH376_CS_EN;
ch376_tCmd(CMD_DISK_CONNECT);
delay_us(20);
rdata=ch376_rData();
CH376_CS_DIS;
temp[3]=rdata;
sprintf(temp,"%x ", rdata);
prints(temp);
if(USB_INT_SUCCESS==rdata)
{prints("disk is get \n");
return 1;
}
有问题吗
首先第一个问题,CMD_DISK_CONNECT是等中断来接收数据而不是延时后接收数据。第二个问题,CS拉高不是在接收数据之后,而是在发完此命令后拉高。第三个问题,想获取中断状态不是直接读数据就能读出来的,而是通过CMD01_GET_STATUS命令来得到。
不建议把CS拉低、拉高由自己写,参考例程修正。