1. CAN(Controller Area Network )通信

   1.1 协议结构组成

        

  1. 一组CAN总线由CAN_H(高)、CAN_L(低)组成,双绞线互相缠绕结构,分为闭环通信与开环通信,由于物理层的结构差异,两者使用的收发芯片各不同:

    1. 闭环:最高通信速度为1Mbps,并在尽头接120Ω的终端电阻。
    2. 开环:最高的通信速度为125Kbps,两根线不相连,每根总线上要串联一个2.2KΩ的终端电阻,通信距离可达1KM。
    额定总线电平
  2. 采用差分信号进行数据传输,逻辑0(显性电平)逻辑1(隐性电平)用两根线的电压差表示:当压差>=1.5V时逻辑0;当压差0V至0.5V时为逻辑1。

  3. 与MCU通信需使用CAN收发器连接连接至总线,同时保持同样的波特率。

1.2 数据帧格式

数据帧由8部分组成:起始位,识别位、RTR位、控制码、数据码、CRC码、ACK码、结束位

CAN数据帧格式
  1. 起始位: (1bit) 必须为逻辑0

2. 识别位:(11bit)每组CAN通信中,每个MCU拥有由11位识别位组成的唯一识别码,同时这11位也作为仲裁段。

       仲裁段:当其他设备也需要传输报文时,根据识别码(仲裁段)进行仲裁,判断识别码,当同时遇到逻辑0跟1时,总线置为逻辑0,逻辑1的数据帧不再发送。

仲裁示例,0X659赢得仲裁

3.  RTR位: (1bit)用于区分数据帧(置0)及远程请求帧(置1)。

           远程帧没有数据码,总线单元发出远程帧,请求发送具有同一识别符的数据帧。如果相同标识符数据帧与远程帧冲突,则数据帧优先。

4. 控制码  IDE位:(1bit)用于确认标准帧(逻辑0)or扩展帧(逻辑1)

             空闲位:(1bit)预留位,(具体作用未知)

              DLC:(4bit)数据长度,为1时,代表后面数据长度1字节(8位)以此类推。

5.数据码:  存放数据内容,位的大小由前面的DLC(数据长度位)确定。

CANoe解析数据码

6.CRC码:(16bit)(循环冗余校验位)

        CRC序列(校验码):(15bit)  发送方与接收方的CRC值对应上,才为通信成功;否则重新发送数据帧。

        CRC界定符:(1bit)为固定的逻辑1,将后面信号界定隔离。

7.ACK码(应答场):(2bit)用于确认报文是否被接收器正确接收。

       ACK:  (1bit)接收了正确的报文后,向发送器发送逻辑0(显性电平),以示正确接收;否则为逻辑1(隐性电平),触发ACK错误。

           注:多节点通信时,如果有接收器错误接收,但ACK仍会置为0,不过会发送错误帧,此帧丢弃处理,发送器重新发送。

        DEL:  (1bit)界定符,固定为逻辑1。

8. 结束位 : (7bit)为7位逻辑1,代表此帧结束。

2.UART(通用异步收发器)串口通信

2.1 协议结构组成

1. 采用两根线,RX为接收数据线,TX为发送数据线,对应的,设备1的RX 接 设备2的TX,设备1的TX 接设备2的RX

2. 不同设备间通信需共地(GND)

3.RX跟TX数据互不干扰。

4.更换物理层可实现TTL、RS232、RS485通信。

5. 设备间通信需保持波特率一致才能确保数据传输的正确性。波特率:每秒传输的bit数(bps),常用有 9600bps、 19200、38400、57600 以及 115200 等,每个位(bit)的传输时间则为\frac{1}{bps}

2.2 数据帧格式

数据帧由起始位数据位校验位停止位组成。

1. 起始位 :(1bit) 数据不传输时保持高电平,当有数据发送时下拉为低电平,并保持一个波特率周期。

2. 数据位:(5~8bit)  需要传输的数据内容。

3.奇偶校验位:(1bit)记录数据位中为1个的个数,为0则偶数,为1则奇数,当与实际不符时则传输错误。

4.停止位:(1bit)结束标志位,电平拉高持续1~2字节。

3. I2C(Inter-Integrated Circuit)协议

3.1 协议结构组成

1. 由两条信号线组成 :SDA(Serial Data Line)数据线、SCL(Serial Clock Line)时钟线,通常为一主多从模式,主机可以发起和结束一次通信,从机只能被呼叫

2. 总线上分别接上拉电阻,两条线默认保持高电平,数据传输过程中,除起始位外,需要在SCL(时钟线)高电平时,SDA(数据线)电平要保持稳定:

        传输逻辑1时,在SCL(时钟线)高电平时,SDA(数据线)保持高电;传输逻辑0时,在SCL(时钟线)高电平时,SDA(数据线) 保持低电平

3. 任意一个设备输出逻辑0,都能将线拉至低电平,但无法拉高(设备输出逻辑1时只会保持高阻态模式)。

3.2 数据帧格式

        

1.起始位(1bit):SCL(时钟)保持高电平时,捕捉到SDA(数据) 一个下降沿,视为数据帧开头。

2.设备地址位 (7bit) :主机发送,所有从机判断是否为自己的设备地址。理论支持127个地址(7位二进制的最大值)。

3. 读写位(1bit):主机发送,半双工通信中,读写无法同时进行,需要确定数据传输方向。

        向从机读数据:逻辑1,

        向从机写数据:逻辑0。

4.应答位(1bit):从机发送,每发送一个字节数据后,主机释放SDA,此时SDA被上拉电阻拉高。当从机成功接收到数据时,向主机发送应答信号,应答(ACK)拉低,发送逻辑0,非应答(NACK)逻辑1。

5.寄存器地址位/数据位(8bit):主机向从机发送要读写的寄存器地址位。从机返回应答信号,再进行数据的读写。

上图为读数据,下图为写数据
  • 读数据
    • 再次发送起始信号
    • 再次发送设备地址
    • 发送读数据信号(逻辑1
    • 接收从机数据,主机成功接收后返回成功应答信号(ACK)逻辑1。
      • 注:这里的应答信号与从机的相反,从机返回的应答信号ACK为逻辑0;NACK为逻辑1。
  • 写数据
    • 向从机发送8位数据,从机成功接收后返回成功应答信号(ACK) 逻辑0。

6.停止位(1bit):   与起始信号相反,捕捉到一个上升沿信号,视为停止信号。

    Logo

    智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

    更多推荐