watercici 发表于 2018-10-11 19:59:49

板子电压不稳会导致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();
}就是一直读到的就是忙,出不来。

xiaoshen-372360 发表于 2018-10-12 09:00:24

做个超时处理或者故障报告,然后添加重试机制

huangyanga 发表于 2018-10-12 09:05:29

硬件需要做防干扰处理

wenyangzeng 发表于 2018-10-12 09:35:19

带电拔插串口是违规操作了,串行通讯因此失败就难免了。

zc1107473010 发表于 2018-10-12 10:01:47

1.插拔串口一般不会影响SPI,你可以参考看看电源电压输入输出是否稳定,且供电足够,以及电容是否匹配
2.产品开发中,通讯不要使用这种死循环的方式,而使用超时+打印log,即保证模块出问题不影响产品其它功能,也方便后期追踪

wwwicq 发表于 2018-10-12 10:26:39

会,加超时退出

zjczm 发表于 2018-10-12 10:28:59

电压不稳会导致各种异常,先解决稳压问题啊。

butterflyspring 发表于 2018-10-12 11:43:52

你可以将电源问题描述清楚一点,这样方便大家了解

watercici 发表于 2018-10-13 10:53:52

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();
}

watercici 发表于 2018-10-13 10:54:18

结贴。方法参考楼上回复。
页: [1] 2
查看完整版本: 板子电压不稳会导致SPI通信不稳吗?