断断续续的调了几天,今天终于把wk这块片子调试完成。
解决了数据发送超32个字符会死的,rs485支持问题。
32个字符会死的问题是由多核处理器引起的,在定位问题时,把一个核关闭,处于一个cpu时,就一点点问题都没有。
root@ ss /sys/devices/system/cpu/cpu1$ echo 0 >online
[ 3555.955602] CPU1: shutdown
这样操作完,数据收发完全正常。明确了问题是多核引起的问题。
多核问题上,用spin_lock_irqrestore来关,不仅关中断,还要关cpu同步,这样操作上保证串行。读写寄存器,读写fifo时都加锁,这样才会有效。
在中断处理上,不要嵌套处理,这样不会内部死锁。
基本上这个问题就解决了。
rs485问题:
按芯片手册增加485配置,且要把RTSDLY 这个配置上数值,不然rts不会生效。
验证时,通过数据收发,rts引脚上有高低电平产生,调试就基本完成。