通信基础知识
1.1 接口技术
1.1.1 接口
我们知道CPU的作用是对数据进行处理,那它又是如何与内存或其他外设(芯片)进行数据交换的呢?接口就是CPU与外部世界的连接部件,它是CPU与外界进行信息交换的中转站。
1.1.2 并行接口
对于大数据量的交换一般会使用很多数据线来进行并行数据收发,有些甚至还有独立的地址线来进行寻址,这种接口我们叫做并行接口。嵌入式中比较典型的就是内存和Nandflash 所用的接口,如下图所示:
1.1.3 串行接口
然而大部分其它外设并没有这么频繁、这么大的数据量进行交换,使用这么多的引脚通信就会导致芯片面积比较大,这时更多的只是用一根或几根数据线来进行串行的数据交换,这种通信方式的接口叫做串行接口。
UART就是一种非常典型的串行接口。
1.1.4 四个接口技术
在嵌入式软件开发过程中,使用得最多、必须熟练掌握的接口技术包括:
1根线通信:1-Wire/W1/一线协议,典型代表DS18B20温度传感器、DHT11温湿度传感器;
2根线通信:I2C/IIC协议,典型代表SHT30温湿度传感器、OLED显示屏、RTC、触摸屏等;
3根线通信:UART/RS232/串口协议,典型代表GPS、GPRS/3G/4G、NB-IoT、串口蓝牙、WiFi 等;
4根线通信:SPI 协议,典型代表NFC芯片、SPI以太网、LoRa 等;
1.2 计算机通信
假设现在CPU需要给某个外设芯片发送字符串“Hello”,那他们是如何发送出去的呢?我们知道字符串是由字符组成的,这样“Hello”这个字符串就可以按顺序分5次发送出去,即:‘H’、‘e’、‘l’、‘1’、‘o’。而字符又是以ASCII值的形式存储的,所以这5个字符也就是以字节的形式发送的,即:0x48、0x65、Ox6C、0x6C、Ox6F。
我们知道计算机所能处理的是0、1、0、1这样的数字信号,表现在物理硬件上就是高、低电平,另外一个字节(Byte)由8个位(bit)组成,这样每个字节的数据就可以通过8个连续的高、低电平发送给对方了。
1.3 LSB与MSB
在之前学习C语言时,我们了解了存储时的大端字节序(MSB,Most Significant Bit,最高有效位)与小端字节序(LSB,Least Significant Bit,最低有效位)问题,如果低字节存储在低地址位、高字节存储在高地址上,这种存储方式称为小端字节序(LSB),反之则称为为MSB。
在通信协议中我们也会经常见到MSB与LSB,这是指在通信的时候,要发送一个字节八位数据时,是先发高为还是先发低位。如果先发高位(bit[7])则叫MSB,如果先发低位(bit[0])则叫LSB。
1.4 同步与异步
如果收发双方在通信时,有同步时钟信号则叫同步通信(Synchronization)。
如果收发双方在通信时,没有同步时钟信号则叫异步通信(Asynchronization)。
异步通信靠通信速率来规范高/低电平要维持多长时间来表示0/1,这个速率叫做波特率(baudrate),其单位为 bps(bits persecond)。
1.5 串行与并行
1.6 全双工、半双工、单工
1.7 电平信号和差分信号
电平信号和差分信号是用来描述通信线路传输方式的,也就是说如何在通信线路上表示1和0。
电平信号的传输线中有一个参考电平线(一般是GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定;
差分信号的传输线中没有参考电平线,所有都是信号线(D+,D-),然后1和0的表达靠信号线之间的电压差。
电平信号的两根通信线(数据线和GND)之间的电平差异容易受到干扰,传输容易失败;
差分信号不容易受到干扰,因此传输质量比较稳定。现代通信(如网线、USB线等)一般都使用差分信号,电平信号几乎没有了。