我们最近使用CH32V305的SPI遇到一点问题,请教一下如何解决。
一、CH32V305作为Master
1. NSS设为硬件模式,主循环中查询发送,NSS无电平变化;
主循环查询收发
主机连续发送0xA5,从机发送0x5A,多次发送后数据出错
从机收到的数据:
主机收到的数据:
示波器抓信号,NSS无电平变化,一直是低电平:
2. 将NSS脚设为IO口,发送时拉低,收到数据后拉高:
现象和1一样,但是NSS有反应,但是没有持续拉低,见下图:
放中断里也是类似的现象
3. 主循环查询发送,中断接收,NSS波形正常,收发数据正常
CH32V305作为主机,虽然这个状态OK,但是实际上还是有点问题的,从机的CPHA是0,主机要设置成1才能正常收到数据,但是主机无论CPHA是0还是1收数据都是OK的,而且目前最高速度只能设置成32分频,再快传输就会出错。
从下图波形中可以看出,从机是在下降沿,即第一个边沿去拉MISO,但是主机这边按照第一个边沿去读就始终是错误的数据,没办法只能从第二个边沿去读数据才正常。
CH32V305作为主机有极性问题和传输速率问题,那如果设置成从机会不会有问题呢?
二、 CH32V305作为Slave
CLK为3.3MHz,也是查询发送,中断接收,主机连续发送256个字节的数据,数据详见下图,从机一直发送0xA5
第一包数据主从机收到的前面几个字节是错误的。
第二包数据开始正常,但是连续发送多包数据之后数据又出错了
主机接收数据:
从机接收数据:
代码配置见下图:
传输时,隔一段就会出错一次
主机在传送连续数据是,NSS是一直拉低状态,比如一次性传输256个字节,这256个字节的传输期间,NSS都是低电平,CH32V305是否不支持这种连续数据传输?
三、问题求解
CH32V305作为从机更符合我们的使用场景,所以麻烦帮忙解答一下以下问题:
1.主机在传送连续数据是,NSS是一直拉低状态,比如一次性传输256个字节,这256个字节的传输期间,NSS都是低电平,CH32V305是否不支持这种连续数据传输?
2.传输出错可能是什么原因导致的?我们的软件配置有没有问题?如何解决出错的问题?
3.目前高速率传输时,数据传输不稳定,高速率SPI传输下,需要注意哪些地方?