引言
在当今智能化、网络化的时代,各种电子设备间的高效通信成为了技术发展的关键。而控制器局域网络(Controller Area Network,简称CAN),作为嵌入式系统中不可或缺的通信协议,正扮演着链接桥梁的重要角色。本文将带各位小伙伴深入了解CAN接口的基本原理。
CAN总线介绍
CAN总线采用广播通信模式,意味着网络中的每一节点都能接收传播于总线上的所有数据报文,并非定向传输至特定节点。这一特性确保了信息的广泛可达性,不过,各节点并非被动接受所有信息。实际上,CAN技术内置的硬件过滤机制使得每个节点能智能化筛选,仅对与其相关的报文作出响应,实现了有效的信息过滤与处理策略。
总线采用不归零制编码结合线与逻辑设计,确保了信号的稳定传输。在此机制下,各个模块经由线与逻辑相连至总线,这意味着当单一节点输出逻辑0时,即使其余节点均发出逻辑1,总线信号也会被强势界定为逻辑0,体现了总线在信号竞争中的独断性。
CAN总线上的电平
CAN2.0A/B标准规定:总线空闲时,CAN_H和CAN_L上的电压为2.5V;
在数据传输时,显性电平(逻辑0):CAN_H 3.5V CAN_L 1.5V;
隐性电平(逻辑1):CAN_H 2.5V CAN_L 2.5V;
![wKgZomYrC6SAAlq0AAtWUkw5vuE991.png](https://file1.elecfans.com/web2/M00/DA/DF/wKgZomYrC6SAAlq0AAtWUkw5vuE991.png)
CAN标准定义四种不同的报文类型(数据帧、远程帧、错误帧、过载帧)。报文使用逐位仲裁智能方案来控制对总线的访问,每条报文都带有优先级标记,在协议中规定ID小则优先级高。CAN总线拓扑图如下图:
![wKgaomYrC7yAX3SAAA85Tuauu4s260.png](https://file1.elecfans.com/web2/M00/DB/BF/wKgaomYrC7yAX3SAAA85Tuauu4s260.png)
ElfBoard开发板 CAN接口硬件电路介绍
ELF 1开发板在其底板上集成了1路CAN接口,而ELF 1S开发板则通过扩展板增设了额外的1路CAN接口,这一接口经由3.81mm间距的绿色端子引出。
当前,ELF 1开发板搭载了TJA1040T型CAN收发器。关于CAN模块原理图如下图所示。考虑到TJA1040T器件的输出端RX输出的是5V电平信号,这可能对核心板的3.3V工作电压环境构成兼容性挑战。为保护核心板,采取了电压匹配措施:通过电阻R51和R54实施分压,将RX信号平滑过渡至3.3V,随后安全送至处理器的CAN1_RX输入端口,从而保障了系统间通讯的稳定。
![wKgZomYrC9OAJYRRAA6ZPF53Rmo802.png](https://file1.elecfans.com/web2/M00/DA/DF/wKgZomYrC9OAJYRRAA6ZPF53Rmo802.png)
为了优化外部电路设计,各位小伙伴可以参考以下的TJA1040T芯片功能框图和引脚详解。这些资料将加速大家对TJA1040T芯片特性的理解进程。
![wKgaomYrD0eAFZ9BAAzmyQBVEk4802.png](https://file1.elecfans.com/web2/M00/DB/C3/wKgaomYrD0eAFZ9BAAzmyQBVEk4802.png)
![wKgZomYrD1eANerCABLSOHdZwc4972.png](https://file1.elecfans.com/web2/M00/DA/E4/wKgZomYrD1eANerCABLSOHdZwc4972.png)
关于CAN接口的设计建议
(1)核心板最多可支持2路CAN;
(2)设计CAN接口时要注意收发器和核心板之间的电平匹配;
(3)终端电阻可以预留插针通过跳线帽选择使用;
关于CAN接口PCB的设计建议
(1)CAN使用差分布线,预留120Ω端接电阻;
(2)连接端口建议预留地信号;
CAN接口对测
ELF 1S开发板提供两路CAN接口,CAN1 集成于底板之上,而 CAN2 则集成在扩展板上。为了实现双向 CAN 测试,需将 CAN1 与 CAN2 两端的信号线对应相连——即高位H线相互接通,低位L线同样相连,以确保两者间的直接通信链路畅通无阻。
![wKgZomYrD4uAAw5mABDt4sAs_rc906.png](https://file1.elecfans.com/web2/M00/DA/E4/wKgZomYrD4uAAw5mABDt4sAs_rc906.png)
开发板启动之后,在命令行输入以下命令,对CAN1配置波特率为125000:
root@ELF1:~# ifconfig can0 down //关闭can1 root@ELF1:~# ip link set can0 up type can bitrate 125000 triple-sampling on //设置can1波特率 flexcan 2090000.can can0:writing ctrl=0x0e312085 IPV6:ADDRCONF(NETDEV_CHANGE):can0:link becomes ready root@ELF1:~# ifconfig can0 up //开启can1
对CAN2配置波特率为125000:
root@ELF1:~# ifconfig can1 down //关闭can2 root@ELF1:~# ip link set can1 up type can bitrate 125000 triple-sampling on //设置can2波特率 flexcan 2094000.can can1:writing ctrl=0x0e312085 IPV6:ADDRCONF(NETDEV_CHANGE):can0:link becomes ready root@ELF1:~# ifconfig can1 up //开启can2
设置CAN2接收数据:
root@ELF1:~# candump can1 & //can2以后台方式接收数据 [1] 686
CAN1发送数据:
root@ELF1:~# cansend can0 123#1234567891234567 //can1发送数据 root@ELF1:~# can1 123 [8] 12 34 56 78 91 23 45 67 //can2接收到数据
CAN2接收到CAN1发送的数据。
至此就完成了对CAN接口的介绍,期待这篇文章能让各位小伙伴对CAN接口有一个全面而深入的理解,推进各位嵌入式爱好者在学习的道路上不断前进。
-
单片机
+关注
关注
6044文章
44632浏览量
639401 -
嵌入式
+关注
关注
5096文章
19199浏览量
308294 -
开发板
+关注
关注
25文章
5144浏览量
98438
发布评论请先 登录
相关推荐
ELF 1技术贴|在NXP源码基础上适配开发板的按键功能
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在NXP源码基础上适配开发板的按键功能](https://file1.elecfans.com/web2/M00/C3/62/wKgZomXq0ymANr0hAABDmHpF1tQ264.png)
ElfBoard技术贴|如何在NXP源码基础上适配ELF 1开发板的UART功能
![ElfBoard<b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何在NXP源码基础上适配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>开发板的UART功能](https://file1.elecfans.com/web2/M00/08/D1/wKgaombzpf2ANbDaAABFevJym7M948.png)
ElfBoard技术贴|ELF 1开发板适配摄像头详解
![ElfBoard<b class='flag-5'>技术</b><b class='flag-5'>贴</b>|<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>开发板适配摄像头详解](https://file1.elecfans.com/web3/M00/04/02/wKgZO2duDgOAAHDXAAA9ZyCKWSc079.png)
基于DSP的CAN总线接口设计
![基于DSP的<b class='flag-5'>CAN</b>总线<b class='flag-5'>接口</b>设计](https://file1.elecfans.com//web2/M00/A5/4A/wKgZomUMN8KADV8HAAA8dBWLSTg981.jpg)
关于ELF1/ELF1S开发板的音频接口,你需要知道的都在这!
![关于<b class='flag-5'>ELF1</b>/<b class='flag-5'>ELF1</b>S开发板的音频<b class='flag-5'>接口</b>,你需要知道的都在这!](https://file1.elecfans.com/web2/M00/AB/8D/wKgaomVAmk6ANFc_AAA4WGadmeE234.png)
ELF 1技术贴|LCD作为终端控制台的方法
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|LCD作为终端控制台的方法](https://file1.elecfans.com/web2/M00/B6/FF/wKgaomWCr8CAduFMAABGVuCFI2s064.png)
ELF 1技术贴|在NXP源码基础上适配ELF 1开发板的LED功能
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在NXP源码基础上适配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>开发板的LED功能](https://file1.elecfans.com/web2/M00/BA/50/wKgaomWOKTKAfuWLAABArY1D4Jg940.png)
ELF 1技术贴|如何支持exFAT和NTFS格式
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何支持exFAT和NTFS格式](https://file1.elecfans.com/web2/M00/C0/06/wKgaomW6BtqAYrRcAABGdfZLvpM103.png)
ELF 1技术贴|如何将Python3.6.9移植到开发板上
![<b class='flag-5'>ELF</b> <b class='flag-5'>1</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何将Python3.6.9移植到开发板上](https://file1.elecfans.com/web2/M00/C0/94/wKgZomXW5EiAf1EoAABBQv84DIc700.png)
ELF技术贴|如何在开发板上实现对Java的支持
![<b class='flag-5'>ELF</b><b class='flag-5'>技术</b><b class='flag-5'>贴</b>|如何在开发板上实现对Java的支持](https://file1.elecfans.com/web2/M00/C5/1A/wKgaomXxaDCADbm_AAA89wQPeVU499.png)
ElfBoard技术贴|在NXP源码基础上适配ELF 1开发板的按键功能
![ElfBoard<b class='flag-5'>技术</b><b class='flag-5'>贴</b>|在NXP源码基础上适配<b class='flag-5'>ELF</b> <b class='flag-5'>1</b>开发板的按键功能](https://file1.elecfans.com/web2/M00/FB/88/wKgaomaN6ZaAeoxXAABAhfkiKBc281.png)
评论