【MCU_MOSI_MISO别再交叉了】
一、背景
STM32常见接口SPI,经常会有人把MOSI和MISO接反了。自己之前画板子,也交叉过,是时候做个总结了。
二、MOSI和MISO
1、MOSI = DIN = SDI ,Master发出的数据,Slave接收
2、MISO = DOUT = SDO,Slave发出的数据,Master接收
**=**表示这几个名字是等效的,完全一样的。
三、MOSI和MISO是否要交叉?
Ans:不交叉,直连。
1、MOSI <=> MOSI
2、MISO <=> MISO
Q1: 为什么不需要交叉呢?
A1:
MOSI <=> MOSI等同于Master out => Slave in,
MISO <=> MISO等同于Master in <= Slave out,
四、交叉后,会怎么样?
1、近期接触了一个案例,硬件连接没问题,MOSI和MOSI连接,MISO和MISO连接,但是通信异常。于是开启了定位过程。
Step1:Keil工程,debug调试,代码上没有接收到数据。
Step2:抓Slave侧DIN管脚信号,信号幅度高电平1V左右。比高电平门限低,软件没识别到数据是合理的。
Step3:为什么信号幅度会偏低呢?
Step4:抓取DIN管脚串阻前后的波形比对。DIN串阻前信号幅度只有2V左右,经过33R串阻后,幅度就更小了。
Step5:将串阻短路后,量DIN管脚,直接量不到信号了。
Step6:将串阻断开后,量MCU发出的信号,幅度正常。百思不得其解。
Step7:最后发现,代码上把DIN和DOUT管脚交叉了,真是防不胜防啊,硬件没交叉,软件上却出现了交叉。到此,定位结束。
五、结论
1、MOSI和MISO软硬件两个层面都别再交叉啦,直连就对了。
2、为防止交叉,绘制硬件时,容易交叉的地方都预留串阻,避免割线。最好的方式是彻底理解后正确连接,连割线都不需要。串阻只是用于调节信号质量用的。
作者:正弦波_Wave