板子电压不稳会导致SPI通信不稳吗?
我们自己的板子,板子正常通电时程序运行正常,但是一旦进行安检操作或者插拔串口就会造成SPI卡死在读状态忙不忙的死循环中。void Flash_WaitforWriteEnd(void){
u8 Flash_sta = 0;
// SPI2_SetSpeed(SPI_BaudRatePrescaler_4);
SPI2_Flash_CS_LOW();
delay_us(2);
SPI_FLASH_SendByte(READ_STATUS_REGISTER_1);
do
{
Flash_sta = SPI_FLASH_SendByte(0xFF);
}while((Flash_sta&0x01) == 0x01);
SPI2_Flash_CS_HIGH();
}就是一直读到的就是忙,出不来。
做个超时处理或者故障报告,然后添加重试机制 硬件需要做防干扰处理 带电拔插串口是违规操作了,串行通讯因此失败就难免了。 1.插拔串口一般不会影响SPI,你可以参考看看电源电压输入输出是否稳定,且供电足够,以及电容是否匹配
2.产品开发中,通讯不要使用这种死循环的方式,而使用超时+打印log,即保证模块出问题不影响产品其它功能,也方便后期追踪 会,加超时退出 电压不稳会导致各种异常,先解决稳压问题啊。 你可以将电源问题描述清楚一点,这样方便大家了解 butterflyspring 发表于 2018-10-12 11:43
你可以将电源问题描述清楚一点,这样方便大家了解
谢谢,找到问题了,是我读取忙状态的函数写的有点问题,我的读指令就发了一遍,在循环中也应发读指令。void Flash_WaitforWriteEnd(void)
{
u8 Flash_sta = 0;
// SPI2_SetSpeed(SPI_BaudRatePrescaler_4);
SPI2_Flash_CS_LOW();
delay_us(2);
do
{
SPI_FLASH_SendByte(READ_STATUS_REGISTER_1);
Flash_sta = SPI_FLASH_SendByte(0xFF);
}while((Flash_sta&0x01) == 0x01);
SPI2_Flash_CS_HIGH();
} 结贴。方法参考楼上回复。
页:
[1]
2