查看: 1474|回复: 0

[评测分享] 【更适合初学者的开发板ELF 1】+ 10.CAN通讯

[复制链接]
  • TA的每日心情
    无聊
    2024-10-11 22:04
  • 签到天数: 67 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2023-12-17 12:14:45 | 显示全部楼层 |阅读模式
    分享到:
    1.CAN概述
    控制器区域网络(Controller Area Network,CAN)是一种高度可靠、实时性强的串行通信协议和总线系统,最初为汽车电子应用而设计,但已广泛应用于多个领域。CAN 通信采用点对点或总线拓扑结构,支持多种通信速率,使用帧格式传输数据。其强大的错误检测和冲突处理机制使其在恶劣环境下依然可靠。多级优先级机制确保实时通信需求得以满足。CAN 通信在汽车、工业控制、医疗设备和航空航天等领域得到广泛应用,为嵌入式系统提供了可靠的通信基础。
    2.CAN通信协议
    通过 CAN 总线传输数据是需要按照一定协议进行的,CAN 协议提供了 5 种帧格式来传输 数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有 11 位标识符(ID),扩展格式有 29 个标识符(ID)。
    逻辑电平:
    CAN 协议中对它使用的 CAN_High 及 CAN_Low 表示的差分信号做了规定,以高速 CAN 协议为例,当表示逻辑 1 时 (隐性电平) ,CAN_High 和 CAN_Low 线上的电压均为 2.5v,即它们的电压差 VH-V:-L=0V;而表示逻辑 0 时 (显性电平) ,CAN_High 的电平为 3.5V,CAN_Low 线的电平为 1.5V,即它们的电压差为 VH-V:-L=2V。
    1.png
    数据帧格式:
    2.png

    帧起始:
    SOF 段 (Start OfFrame),译为帧起始,帧起始信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其它节点通过帧起始信号的电平跳变沿来进行硬同步。
    仲裁域:
    当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,这也是它名称的由来。
    仲裁段的内容主要为本数据帧的 ID 信息 (标识符),数据帧具有标准格式和扩展格式两种,区别就在于 ID 信息的长度,标准格式的 ID为 11 位,扩展格式的 ID 为 29 位,它在标准 ID 的基础上多出 18 位。在 CAN 协议中, ID 起着重要的作用,它决定着数据帧发送的优先级,也决定着其它节点是否会接收这个数据帧。CAN 协议不对挂载在它之上的节点分配优先级和地址,对总线的占有权是由信息的重要性决定的,即对于重要的信息,我们会给它打包上一个优先级高的 ID,使它能够及时地发送出去。也正因为它这样的优先级分配原则,使得 CAN 的扩展性大大加强,在总线上增加或减少节点并不影响其它设备。报文的优先级,是通过对 ID 的仲裁来确定的。根据前面对物理层的分析我们知道如果总线上同时出现显性电平和隐性电平,总线的状态会被置为显性电平,CAN 正是利用这个特性进行仲裁。
    控制域:
    在控制段中的 r1 和 r0 为保留位,默认设置为显性位。它最主要的是 DLC 段 (Data LengthCode),译为数据长度码,它由 4 个数据位组成,用于表示本报文中的数据段含有多少个字节, DLC 段表示的数字为 0~8
    数据域:
    数据段为数据帧的核心内容,它是节点要发送的原始信息,由 0~8 个字节组成,MSB 先行。
    CRC域:
    为了保证报文的正确传输,CAN 的报文包含了一段 15 位的 CRC 校验码,一旦接收节点算出的CRC 码跟接收到的 CRC 码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。CRC 部分的计算一般由 CAN 控制器硬件完成,出错时的处理则由软件控制最大重发数。在 CRC 校验码之后,有一个 CRC 界定符,它为隐性位,主要作用是把 CRC 校验码与后面的 ACK段间隔起来。
    应答域:
    ACK 段包括一个 ACK 槽位,和 ACK 界定符位。类似 I2C 总线,在 ACK 槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在 ACK 槽和帧结束之间由 ACK 界定符间隔开。
    帧结束:
    ACK 段包括一个 ACK 槽位,和 ACK 界定符位。类似 I2C 总线,在 ACK 槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在 ACK 槽和帧结束之间由ACK 界定符间隔开。


    硬件原理图:
    3.png
    使用开发板与can分析仪连接:
    4.jpg
    3.软件设计

    发送一个CAN数据帧:
    5.png
    接收数据帧:
    6.png
    4.验证:
    编译代码生产可执行文件,将可执行文件拖入开发板,添加可执行权限
    7.png
    CAN分析仪接收数据:
    8.png



    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 07:09 , Processed in 0.115247 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.