本帖最后由 suncat0504 于 2022-1-12 16:10 编辑
#申请原创# SPI、I2c、USART协议,对于单片机电子开发爱好者而言,应该是非常熟悉的东西了。什么时候使用、怎么使用这些协议,我说说受自己的体会哈。 在我的就职经历中,更多的时间是参与纯软件的开发。作为程序员,编程、调试、测试、运用是必不可少的工作内容。程序编好了,是一定要进行测试的。通常的测试手段是加断点、单步调试;输出中间的运行结果等。这些手段都通过屏幕来查看。这些手段有些是可以在调试硬件的开发中使用的,比如嵌入式的linux开发的时候。但有些硬件开发是没有显示设备可用的。这个时候,为了能够看到调试过程、测试结果,我们一般采用USART协议,把数据发给计算机,通过串口助手之类的APP应用,获得调试数据。而大多数MCU都会提供USART, 比如以下芯片: 这是早期的8031产品,10、11脚是USART引脚。 AT89C51,引脚和8031完全一致,10、11脚是USART引脚。 17、18脚就是USART引脚。 STC89C52系列,标注RXD、TXD的USART引脚 ESP32、ESP8266模块中的标注RX、TX的USART引脚 所以我觉得,学习硬件,USART协议是必学内容。那么USART协议是什么协议呢?作为电子爱好者,我们知道,按照数据传送的方式,通讯可分为串行通讯与并行通讯。大多数液晶使用的是并行通讯。比如LCD1602、12864。数据传输时,同时把指令或者数据提供到一个8位的IO引脚上,传送给目标。早期的计算机并口,也是使用并行通讯模式。这个模式的优点是数据同时提供,读一次IO口,就能得到完整的8位数据,数据传输速度快。但缺点也很明显,就是占用口位多。由此,进化出来了使用USART协议的串口。串口,顾名思义,数据串着来,就像我们吃的烤串一样。要发送的8位数据被分解为一个一个Bit位,一次传输。接收方按照发送方的发送顺序,一位一位再组合起来,形成完整的8位数据。当然,实际的串行传输,一般都伴随着协议走。实际的USART协议也让比较复杂,涉及波特率、开始位、数据位、校验位、停止位等,并不是简单地把数据变成串收发。我们通常用的USART协议,至少要有两个IO口线,即发送的TXD(TX)、接收的RXD(RX),再加上一个地线,有了这三根线,就能实现USART协议、传输数据了。早以前,串口的USART协议中,还有其他一些口线,但是现在已经不常用了。所以就不做介绍了。
使用USART协议的设备,可以组网,理论上最大允许255个设备组网。 除了USART协议,还有SPI协议、IIC协议、CAN总线协议等。 SPI协议是一种高速的,全双工,同步的通信总线协议,使用四根口线完成通讯 (1)MOSI– SPI总线主机输出/ 从机输入 (2)MISO– SPI总线主机输入/ 从机输出 (3)SCLK –时钟信号,由主设备产生 (4)CS – 从设备使能信号,由主设备控制,有的IC此pin脚叫SS。
和USART相比,这个协议不需要设置波特率。数据的传递,是通过MOSI、MISO输入输出。利用SCLK信号的高低电平脉冲信号,在MOSI、MISO取得输入输出数据信号。CS引脚是用来选择通讯设备的。由于CS引脚的设置,利用SPI协议组网时,稍微有些棘手,需要为每一个子设备提供一个CS引脚。 显然,使用SPI协议组网,是相当不划算。所以应用于单个子设备的场合比较多。
IIC协议,使用的口线也只有两个SCL和SDA,也不需要波特率这种东西的。利用SCL信号的高低电平脉冲信号,在SDA总线上提供数据即可。是不是很简单?简单是简单,我们要记住一条,在数据通讯中,使用的口线越少,就会需要更复杂的通讯协议,来实现设备之间数据的正常收发。和SPI协议的区别上,我的理解是,把MOSI和MISO合并为SDA,省去CS,利用协议在数据中设置子设备地址,实现CS的功能。当然,SPI协议中,使用MOSI和MISO是能同时收发数据的。而IIC的数据传递,在同一个时刻,只能是发和收中的一个,不能同时完成。我们经常用的24xx系列存储芯片,使用的就是IIC协议,非常典型。 A0-A2是设置器件物理地址,接入VCC或者GND就行,通过组合,可以实现0-8个物理地址000-111。使用IIC协议,因为使用口线少,是很容易组网的。 在嵌入式开发中,具体使用什么协议进行数据通讯,是和MCU有直接关系的。像早期的51系列单片机只提供了标准的串口通讯,而SPI和IIC协议通讯是需要通过标准IO来模拟才能实现。AVR系列的单片机以及后来衍生出来的其它51系列单片机、STM32系列的芯片中,已经集成了SPI和IIC协议类的引脚,可以直接使用,不用模拟了。比如: Mega16中已经提供了支持SPI协议的引脚5-8,同时还提供了IIC协议的引脚22-34(也称TWI接口)。
我们自己的芯片公司------宏晶公司生产的STC单片机中,也有好多同时集成了SPI、I2c、USART协议的芯片,比如STC15系列的, SPI、I2c、USART这三个协议的具体内容很多,网上也很容易找到相关的资料,所以在这里我就不多说了。从实际使用角度,USART是最常用的,使用的口线少,实现起来也很容易,所以推荐优先使用USART协议来实现通讯。如果你的硬件中需要额外使用存储芯片,而且口线资源比较紧张,那么就推荐使用IIC协议的存储芯片。具体使用什么协议、接口,要根据自己的需要,以及可选用的芯片型号有关。 最后,总结一下这三个协议的异同点: 共同点: 1、都属于串行通讯的范畴 2、都可以用来组网 区别: 1、电气信号线不同,因而占用的资源不同 2、USART、SPI可以实现全双工,而IIC不能 3、传输速度IIC要比USART、SPI慢
|
介绍的比较详细,期待后续补充。