zoukankan      html  css  js  c++  java
  • 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语言中也可以直接嵌入汇编代码。


  • 相关阅读:
    雷观(二十):个人竞争策略,战国策与个人略
    雷观(二十):个人竞争策略,战国策与个人略
    2015年工作中遇到的问题:31-40
    2015年工作中遇到的问题:31-40
    UE4.5.0的Kinect插件(Plugin)<一>
    中国象棋V2:Java源代码、毕业设计等所有文档,已经全部提交到CSDN-Code平台
    中国象棋V2:Java源代码、毕业设计等所有文档,已经全部提交到CSDN-Code平台
    怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨
    Jerry和您聊聊Chrome开发者工具
    Hybris ECP里Customer对应的数据库表
  • 原文地址:https://www.cnblogs.com/chorm590/p/12045689.html
Copyright © 2011-2022 走看看