ARM下常见的通讯接口

2019-12-15

关键字:uart、spi、i2c


 

设备间的通信大体上可以分为以下两种:

1、串行通信;

2、并行通信;

 

其中,串行通信又可分为以下几种:

1、UART;

它的通信需要两个导线,是双全工通信模式。

 

 

2、I2C;

它的通信也压根两根导线,但它属于半双工通信模式。

 

 

3、SPI;

它的通信需要三个导线,属于全双工通信模式。

 

串口通信协议:

串口通信协议在嵌入式开发中是很常用的通信协议,它的通信协议结构如下图所示:

 

因为通信数据的发生是随机的,在不收发数据时串行通信线都是处于空闲状态的,空闲状态通常以高电平表示。当需要发送数据时,串行通信线必须要有一个“动作”以让通信接收方知会我们要开始发送数据了,这样,数据接收方才会作好准备来接收数据。这个开始发送数据前的“动作”就被称为“开始位”。通常以将电平拉低一段时间来表示通信开始标志。

 

串口通信的缺点就是通信速率较低,且容易出错。

 

I2C通信协议:

I2C通信是UART通信的改进版。它虽然也采用两个通信导线,但其中有一根线是专门用于传递“时钟信号”的。所谓时钟信号就是一个标准的高低电平交替变化的方波。通信双方都以这个时钟信号作为标准来读写数据。例如,I2C就规定,发送方只有在时钟信号处于低电平状态时才会发送数据,而接收方只有在时钟信号的上升沿阶段才会去读取数据。这种严格的读写分离模式可以保证通信的准确率。同时,也由于I2C通信仅有一根数据线,这也就限死了I2C只能作为半双工通信模式来使用。

 

SPI通信协议:

前面的 UART 与 I2C 通信协议都有它们各自的优缺点。而 SPI 就是结合了它们二者的优点的产物。SPI通信协议既可以实现全双工通信,又能保证通信准确性。同时它的通信速度也是三者中最快的。

 

前面就是串行通信中常见的几种协议。串行通信要求数据的收发是“有序的”,而并行通信则可以做到数据收发的“无序性”。这种通信模式的不同,直接导致了并行通信的速度远远高于串行通信。但并行通信的代价也是昂贵的,它需要的通信导线也远远多于串行通信。

 

串并行通信模式各自都有它们的优缺点,在实际使用过程中需要结合自身需要来选择应用。

 

在ARM编程中,可以直接对地址进行赋值而不需要创建一个变量,如:

*(volatile unsigned int *)0x11400020 = 0x22;

上面的 0x11400020 即表示ARM芯片中某个寄存器的地址,这条语句的意思就是给这个地址所代表的寄存器赋值 0x22。当然这种编程方式其实并不适合在实际工作是使用。

 

在ARM下开发串口通信程序的步骤其实很简单:

1、根据原理图找到对应的CPU控制管脚;

2、根据芯片手册找到对应的寄存器;

3、配置串口通信寄存器的模式(功能选择、停止位、校验位、波特率等);

4、编写程序进行收发控制。

唯一的难点就在于阅读芯片手册与寄存器含义了。只要搞懂了这些寄存器的含义,配置正确了,串口通信程序也就很容易写了。

 

不止是串口通信,任何一种涉及到芯片寄存器的配置都是这种开发方式的。

 

另外,其实在ARM开发中,C语言中是可以直接调用汇编函数的,C语言中也可以直接嵌入汇编代码。

 


 

posted @ 2019-12-15 22:46  大窟窿  阅读(977)  评论(0编辑  收藏  举报