C2837x入门指南(二十五)—通信系统之CAN
Loading the player...
将在30s后自动为您播放下一课程
接下来我们讲一下控制器局域网CAN通讯 C2000里面的大部分芯片都会标配有CAN通讯接口 除了[听不清]系列里面的F2802X 那么我们新的F28系列里面 CAN通讯 我们叫做e-CAN也就是增强型的控制器 CAN通讯本身是德国博世公司提供的 用于汽车的一种性能组件 经过不断发展 形成了现有的国际标准 ISO11898 CAN通讯属于现场通讯 属于总线的范畴 是一种有效的支持 分布式控制 或者实时控制的创新通讯网络 我们的C2000里面的CAN通讯接口是符合CAN2.0标准的 最高的传输速度达到1兆 CAN通讯最大的特点是废除了传统的地址编码 取而代之是对通讯的数据块 来编码 这个编码叫做标志符 每条报文在发送的时候 有不同截点 可以识别的标识符 它有两种功能 用于报文的过滤和优先级的确定 标识符决定了CAN模块是否接收已发送的报文 如果有两个负责多个截点 要同时发送数据的时候 标识符还决定报文的优先级 我们看CAN通讯 所有截点都是挂在一个总线上 总线采用双绞线的方式 就是两根线就可以了 因此它的导线少 实现的成本也会比较低 而且假如说 线上有多个数据 进行传输 或者说线上有错误发生的时候 我们有冗余的错误降沿机制保证我的通讯可靠性会更高 接下来我们看看CAN通讯的总线 CAN通讯使用两线制的插动总线 也就是我们常说的双绞线 CANH和CANL每个截点是挂接到这个总线上面 总线会带有两个120欧姆的配备电阻 MCU利用发送器与CAN 进行总线通讯 CAN的总线是双绞线 传输速率决定了总线的长度 如果总线的长度低于40米的时候 它的传输速率最高达到 1兆BPS 我们看看每个模块是怎么挂到这个总线上来的 每个C2000芯片 内部都含有一个CAN的控制器 假如需要跟总线相连的话 这边需要一个CAN的tranceiver 也就是它的电频转换的芯片 我们推荐用TI Sn65HVD23X 接下来我们看看CAN通讯的工作原理 如何发送数据 以及数据发生冲突时如何仲裁 我刚才说了 CAN通讯的数据发送 都是基于标识符的 而不是基于地址 这么做的好处是首先总线上的节点数量 是不受限制的 第二是每个节点都能收到数据 去判断 这样它的实时性会有较大的提高 报文的内容是网络中唯一的标识符标志 比如邮箱的标识符 表示总线上是一个温度传感器 还是位置传感器 这些不同的节点 而且网络上所有的节点 都会接收到这个报文 每个节点会对报文进行接收测试 如果该报文是跟本接收点或本邮箱相关的 那么可以对它进行接收 如果不相关 把信号忽略掉 而且标识符具有可以决定报文的优先级 这样一个功能 当多个节点发送数据时 这些标识符决定某个报文享有的优先级的高低 我们看看这个无损按位中拆的机制 仲裁的主要原则是哪个节点的数字位越小 也就是它的标识符的数字越小 它的优先级越高 比如 在CAN的通信总线上 ABC同时在发送数据 我们看看它是如何仲裁的 首先 行驶完后 我在第一个时钟信号来判断 这个地方我们看到 B总线在下一个[听不清]是一个高电平 因此B在这个第一个时钟上升沿的时候 能取得总线的控制权 总线只保留了A和C A和C现在还是低电平 我们看下一个时钟的上升沿的时候 我们看到A继续保持低电平 C跳转到了高电平 所以C丢失了总线的控制权 A获得了总线控制权 我们可以看到 这时候总线的信号跟A是完全一样的 这样的话 A总线获得了控制权 A总线继续发送数据 B和C这个节点 失去了总线的控制权 在BC的控制区里面 它会产生相应的警报 来告诉节点 控制器已经丢失了控制权 在下个时刻重新发送 我们看看CAN通讯的数据类型 和结构 CAN的报文格式 每个报文里面最主要的是数据位 每个报文都含有0到8个字节的数据 前面就是我们说到的标识符 它分为两种 一种是标准的结构显示 是11位的标识符 还有一种扩展的标识符 在原来的11位的基础上 加上18位的标识符 我们看2.0的通讯 它是都支持这两种数据格式的 这个图中可以看到 这是我们2837X里面 CAN通讯的内部的结构框图 MCU的CAN通讯模块是一个全功能的 CAN控制器 包含一个报文处理器 一个可控制数据发送和管理 可以存储数据的帧 模块采用CAN2.0 Bactive的规划 也就是模块可以接受和发送标准的帧 也就是11位的帧 和扩展的29位的标识符的帧 CAN控制器模块包含32个邮箱 这个邮箱用来存放数据长度 也就是每个报文接受的0到8个字节的数据长度 都是把数据存放到这个邮箱里面来的 这32个邮箱可以自由分配成接收邮箱或者发送邮箱 并且可以把它配置为标准的帧 接受标准的帧还是扩展的帧 CAN邮箱模块主要分为几个部分 一个是MID 也就是包含邮箱的标识符 我总线发送过来的数据 具体放到哪个邮箱里面 就是靠这个MID的标识符 判断是否接收或者把数据存放在邮箱里面 除了MID 邮箱还有报文的控制域符 MED 和MDH的两个数据存放的高低字节 CAN模块包含多个寄存器 它们分为五个组 分别存储在0X006 00 和0X0061F的数据存储器中 那五个标识符主要是控制和状态寄存器 还有本地接收的[听不清]mask码 还有我们报文的时间钟 还有对象等等 那我们最后总结一下 CAN通讯的话 主要有几个特点 首先它符合CAN2.0的通讯规范的 它支持高达1兆的BPS 也就是要求它的总线长度是少于40米的 还有它含有32个邮箱 这些邮箱可以配置成接受或发送 也可以配置成接收标准 或拓展的标识符 等等 而且在我们的2837X里面 我们的CAN通讯还有一个非常重要的功能 就是self test 自检模式 这个自检又分为好几个模式 自检模式 它的主要功能是 在我程序开发的时候 来判断我的CAN通讯的功能是否正常 好的
接下来我们讲一下控制器局域网CAN通讯 C2000里面的大部分芯片都会标配有CAN通讯接口 除了[听不清]系列里面的F2802X 那么我们新的F28系列里面 CAN通讯 我们叫做e-CAN也就是增强型的控制器 CAN通讯本身是德国博世公司提供的 用于汽车的一种性能组件 经过不断发展 形成了现有的国际标准 ISO11898 CAN通讯属于现场通讯 属于总线的范畴 是一种有效的支持 分布式控制 或者实时控制的创新通讯网络 我们的C2000里面的CAN通讯接口是符合CAN2.0标准的 最高的传输速度达到1兆 CAN通讯最大的特点是废除了传统的地址编码 取而代之是对通讯的数据块 来编码 这个编码叫做标志符 每条报文在发送的时候 有不同截点 可以识别的标识符 它有两种功能 用于报文的过滤和优先级的确定 标识符决定了CAN模块是否接收已发送的报文 如果有两个负责多个截点 要同时发送数据的时候 标识符还决定报文的优先级 我们看CAN通讯 所有截点都是挂在一个总线上 总线采用双绞线的方式 就是两根线就可以了 因此它的导线少 实现的成本也会比较低 而且假如说 线上有多个数据 进行传输 或者说线上有错误发生的时候 我们有冗余的错误降沿机制保证我的通讯可靠性会更高 接下来我们看看CAN通讯的总线 CAN通讯使用两线制的插动总线 也就是我们常说的双绞线 CANH和CANL每个截点是挂接到这个总线上面 总线会带有两个120欧姆的配备电阻 MCU利用发送器与CAN 进行总线通讯 CAN的总线是双绞线 传输速率决定了总线的长度 如果总线的长度低于40米的时候 它的传输速率最高达到 1兆BPS 我们看看每个模块是怎么挂到这个总线上来的 每个C2000芯片 内部都含有一个CAN的控制器 假如需要跟总线相连的话 这边需要一个CAN的tranceiver 也就是它的电频转换的芯片 我们推荐用TI Sn65HVD23X 接下来我们看看CAN通讯的工作原理 如何发送数据 以及数据发生冲突时如何仲裁 我刚才说了 CAN通讯的数据发送 都是基于标识符的 而不是基于地址 这么做的好处是首先总线上的节点数量 是不受限制的 第二是每个节点都能收到数据 去判断 这样它的实时性会有较大的提高 报文的内容是网络中唯一的标识符标志 比如邮箱的标识符 表示总线上是一个温度传感器 还是位置传感器 这些不同的节点 而且网络上所有的节点 都会接收到这个报文 每个节点会对报文进行接收测试 如果该报文是跟本接收点或本邮箱相关的 那么可以对它进行接收 如果不相关 把信号忽略掉 而且标识符具有可以决定报文的优先级 这样一个功能 当多个节点发送数据时 这些标识符决定某个报文享有的优先级的高低 我们看看这个无损按位中拆的机制 仲裁的主要原则是哪个节点的数字位越小 也就是它的标识符的数字越小 它的优先级越高 比如 在CAN的通信总线上 ABC同时在发送数据 我们看看它是如何仲裁的 首先 行驶完后 我在第一个时钟信号来判断 这个地方我们看到 B总线在下一个[听不清]是一个高电平 因此B在这个第一个时钟上升沿的时候 能取得总线的控制权 总线只保留了A和C A和C现在还是低电平 我们看下一个时钟的上升沿的时候 我们看到A继续保持低电平 C跳转到了高电平 所以C丢失了总线的控制权 A获得了总线控制权 我们可以看到 这时候总线的信号跟A是完全一样的 这样的话 A总线获得了控制权 A总线继续发送数据 B和C这个节点 失去了总线的控制权 在BC的控制区里面 它会产生相应的警报 来告诉节点 控制器已经丢失了控制权 在下个时刻重新发送 我们看看CAN通讯的数据类型 和结构 CAN的报文格式 每个报文里面最主要的是数据位 每个报文都含有0到8个字节的数据 前面就是我们说到的标识符 它分为两种 一种是标准的结构显示 是11位的标识符 还有一种扩展的标识符 在原来的11位的基础上 加上18位的标识符 我们看2.0的通讯 它是都支持这两种数据格式的 这个图中可以看到 这是我们2837X里面 CAN通讯的内部的结构框图 MCU的CAN通讯模块是一个全功能的 CAN控制器 包含一个报文处理器 一个可控制数据发送和管理 可以存储数据的帧 模块采用CAN2.0 Bactive的规划 也就是模块可以接受和发送标准的帧 也就是11位的帧 和扩展的29位的标识符的帧 CAN控制器模块包含32个邮箱 这个邮箱用来存放数据长度 也就是每个报文接受的0到8个字节的数据长度 都是把数据存放到这个邮箱里面来的 这32个邮箱可以自由分配成接收邮箱或者发送邮箱 并且可以把它配置为标准的帧 接受标准的帧还是扩展的帧 CAN邮箱模块主要分为几个部分 一个是MID 也就是包含邮箱的标识符 我总线发送过来的数据 具体放到哪个邮箱里面 就是靠这个MID的标识符 判断是否接收或者把数据存放在邮箱里面 除了MID 邮箱还有报文的控制域符 MED 和MDH的两个数据存放的高低字节 CAN模块包含多个寄存器 它们分为五个组 分别存储在0X006 00 和0X0061F的数据存储器中 那五个标识符主要是控制和状态寄存器 还有本地接收的[听不清]mask码 还有我们报文的时间钟 还有对象等等 那我们最后总结一下 CAN通讯的话 主要有几个特点 首先它符合CAN2.0的通讯规范的 它支持高达1兆的BPS 也就是要求它的总线长度是少于40米的 还有它含有32个邮箱 这些邮箱可以配置成接受或发送 也可以配置成接收标准 或拓展的标识符 等等 而且在我们的2837X里面 我们的CAN通讯还有一个非常重要的功能 就是self test 自检模式 这个自检又分为好几个模式 自检模式 它的主要功能是 在我程序开发的时候 来判断我的CAN通讯的功能是否正常 好的
接下来我们讲一下控制器局域网CAN通讯
C2000里面的大部分芯片都会标配有CAN通讯接口
除了[听不清]系列里面的F2802X
那么我们新的F28系列里面 CAN通讯
我们叫做e-CAN也就是增强型的控制器
CAN通讯本身是德国博世公司提供的
用于汽车的一种性能组件 经过不断发展
形成了现有的国际标准 ISO11898
CAN通讯属于现场通讯
属于总线的范畴 是一种有效的支持
分布式控制 或者实时控制的创新通讯网络
我们的C2000里面的CAN通讯接口是符合CAN2.0标准的
最高的传输速度达到1兆
CAN通讯最大的特点是废除了传统的地址编码
取而代之是对通讯的数据块 来编码
这个编码叫做标志符
每条报文在发送的时候 有不同截点
可以识别的标识符 它有两种功能
用于报文的过滤和优先级的确定
标识符决定了CAN模块是否接收已发送的报文
如果有两个负责多个截点
要同时发送数据的时候
标识符还决定报文的优先级
我们看CAN通讯
所有截点都是挂在一个总线上
总线采用双绞线的方式 就是两根线就可以了
因此它的导线少 实现的成本也会比较低
而且假如说
线上有多个数据 进行传输
或者说线上有错误发生的时候
我们有冗余的错误降沿机制保证我的通讯可靠性会更高
接下来我们看看CAN通讯的总线
CAN通讯使用两线制的插动总线
也就是我们常说的双绞线
CANH和CANL每个截点是挂接到这个总线上面
总线会带有两个120欧姆的配备电阻
MCU利用发送器与CAN
进行总线通讯
CAN的总线是双绞线
传输速率决定了总线的长度
如果总线的长度低于40米的时候 它的传输速率最高达到
1兆BPS
我们看看每个模块是怎么挂到这个总线上来的
每个C2000芯片 内部都含有一个CAN的控制器
假如需要跟总线相连的话
这边需要一个CAN的tranceiver
也就是它的电频转换的芯片
我们推荐用TI Sn65HVD23X
接下来我们看看CAN通讯的工作原理
如何发送数据 以及数据发生冲突时如何仲裁
我刚才说了 CAN通讯的数据发送
都是基于标识符的 而不是基于地址
这么做的好处是首先总线上的节点数量
是不受限制的
第二是每个节点都能收到数据 去判断
这样它的实时性会有较大的提高
报文的内容是网络中唯一的标识符标志
比如邮箱的标识符
表示总线上是一个温度传感器 还是位置传感器
这些不同的节点
而且网络上所有的节点
都会接收到这个报文
每个节点会对报文进行接收测试
如果该报文是跟本接收点或本邮箱相关的
那么可以对它进行接收
如果不相关 把信号忽略掉
而且标识符具有可以决定报文的优先级
这样一个功能
当多个节点发送数据时
这些标识符决定某个报文享有的优先级的高低
我们看看这个无损按位中拆的机制
仲裁的主要原则是哪个节点的数字位越小
也就是它的标识符的数字越小
它的优先级越高
比如 在CAN的通信总线上
ABC同时在发送数据
我们看看它是如何仲裁的
首先 行驶完后 我在第一个时钟信号来判断
这个地方我们看到
B总线在下一个[听不清]是一个高电平
因此B在这个第一个时钟上升沿的时候
能取得总线的控制权
总线只保留了A和C
A和C现在还是低电平
我们看下一个时钟的上升沿的时候
我们看到A继续保持低电平
C跳转到了高电平
所以C丢失了总线的控制权
A获得了总线控制权
我们可以看到 这时候总线的信号跟A是完全一样的
这样的话 A总线获得了控制权
A总线继续发送数据
B和C这个节点 失去了总线的控制权
在BC的控制区里面 它会产生相应的警报
来告诉节点 控制器已经丢失了控制权
在下个时刻重新发送
我们看看CAN通讯的数据类型
和结构
CAN的报文格式 每个报文里面最主要的是数据位
每个报文都含有0到8个字节的数据
前面就是我们说到的标识符
它分为两种 一种是标准的结构显示
是11位的标识符
还有一种扩展的标识符 在原来的11位的基础上
加上18位的标识符
我们看2.0的通讯 它是都支持这两种数据格式的
这个图中可以看到 这是我们2837X里面
CAN通讯的内部的结构框图
MCU的CAN通讯模块是一个全功能的
CAN控制器 包含一个报文处理器
一个可控制数据发送和管理
可以存储数据的帧
模块采用CAN2.0
Bactive的规划 也就是模块可以接受和发送标准的帧
也就是11位的帧
和扩展的29位的标识符的帧
CAN控制器模块包含32个邮箱
这个邮箱用来存放数据长度
也就是每个报文接受的0到8个字节的数据长度
都是把数据存放到这个邮箱里面来的
这32个邮箱可以自由分配成接收邮箱或者发送邮箱
并且可以把它配置为标准的帧
接受标准的帧还是扩展的帧
CAN邮箱模块主要分为几个部分
一个是MID 也就是包含邮箱的标识符
我总线发送过来的数据
具体放到哪个邮箱里面 就是靠这个MID的标识符
判断是否接收或者把数据存放在邮箱里面
除了MID 邮箱还有报文的控制域符
MED 和MDH的两个数据存放的高低字节
CAN模块包含多个寄存器
它们分为五个组
分别存储在0X006 00 和0X0061F的数据存储器中
那五个标识符主要是控制和状态寄存器
还有本地接收的[听不清]mask码
还有我们报文的时间钟 还有对象等等
那我们最后总结一下
CAN通讯的话 主要有几个特点
首先它符合CAN2.0的通讯规范的
它支持高达1兆的BPS
也就是要求它的总线长度是少于40米的
还有它含有32个邮箱
这些邮箱可以配置成接受或发送
也可以配置成接收标准
或拓展的标识符
等等
而且在我们的2837X里面
我们的CAN通讯还有一个非常重要的功能
就是self test
自检模式 这个自检又分为好几个模式 自检模式 它的主要功能是
在我程序开发的时候
来判断我的CAN通讯的功能是否正常
好的
接下来我们讲一下控制器局域网CAN通讯 C2000里面的大部分芯片都会标配有CAN通讯接口 除了[听不清]系列里面的F2802X 那么我们新的F28系列里面 CAN通讯 我们叫做e-CAN也就是增强型的控制器 CAN通讯本身是德国博世公司提供的 用于汽车的一种性能组件 经过不断发展 形成了现有的国际标准 ISO11898 CAN通讯属于现场通讯 属于总线的范畴 是一种有效的支持 分布式控制 或者实时控制的创新通讯网络 我们的C2000里面的CAN通讯接口是符合CAN2.0标准的 最高的传输速度达到1兆 CAN通讯最大的特点是废除了传统的地址编码 取而代之是对通讯的数据块 来编码 这个编码叫做标志符 每条报文在发送的时候 有不同截点 可以识别的标识符 它有两种功能 用于报文的过滤和优先级的确定 标识符决定了CAN模块是否接收已发送的报文 如果有两个负责多个截点 要同时发送数据的时候 标识符还决定报文的优先级 我们看CAN通讯 所有截点都是挂在一个总线上 总线采用双绞线的方式 就是两根线就可以了 因此它的导线少 实现的成本也会比较低 而且假如说 线上有多个数据 进行传输 或者说线上有错误发生的时候 我们有冗余的错误降沿机制保证我的通讯可靠性会更高 接下来我们看看CAN通讯的总线 CAN通讯使用两线制的插动总线 也就是我们常说的双绞线 CANH和CANL每个截点是挂接到这个总线上面 总线会带有两个120欧姆的配备电阻 MCU利用发送器与CAN 进行总线通讯 CAN的总线是双绞线 传输速率决定了总线的长度 如果总线的长度低于40米的时候 它的传输速率最高达到 1兆BPS 我们看看每个模块是怎么挂到这个总线上来的 每个C2000芯片 内部都含有一个CAN的控制器 假如需要跟总线相连的话 这边需要一个CAN的tranceiver 也就是它的电频转换的芯片 我们推荐用TI Sn65HVD23X 接下来我们看看CAN通讯的工作原理 如何发送数据 以及数据发生冲突时如何仲裁 我刚才说了 CAN通讯的数据发送 都是基于标识符的 而不是基于地址 这么做的好处是首先总线上的节点数量 是不受限制的 第二是每个节点都能收到数据 去判断 这样它的实时性会有较大的提高 报文的内容是网络中唯一的标识符标志 比如邮箱的标识符 表示总线上是一个温度传感器 还是位置传感器 这些不同的节点 而且网络上所有的节点 都会接收到这个报文 每个节点会对报文进行接收测试 如果该报文是跟本接收点或本邮箱相关的 那么可以对它进行接收 如果不相关 把信号忽略掉 而且标识符具有可以决定报文的优先级 这样一个功能 当多个节点发送数据时 这些标识符决定某个报文享有的优先级的高低 我们看看这个无损按位中拆的机制 仲裁的主要原则是哪个节点的数字位越小 也就是它的标识符的数字越小 它的优先级越高 比如 在CAN的通信总线上 ABC同时在发送数据 我们看看它是如何仲裁的 首先 行驶完后 我在第一个时钟信号来判断 这个地方我们看到 B总线在下一个[听不清]是一个高电平 因此B在这个第一个时钟上升沿的时候 能取得总线的控制权 总线只保留了A和C A和C现在还是低电平 我们看下一个时钟的上升沿的时候 我们看到A继续保持低电平 C跳转到了高电平 所以C丢失了总线的控制权 A获得了总线控制权 我们可以看到 这时候总线的信号跟A是完全一样的 这样的话 A总线获得了控制权 A总线继续发送数据 B和C这个节点 失去了总线的控制权 在BC的控制区里面 它会产生相应的警报 来告诉节点 控制器已经丢失了控制权 在下个时刻重新发送 我们看看CAN通讯的数据类型 和结构 CAN的报文格式 每个报文里面最主要的是数据位 每个报文都含有0到8个字节的数据 前面就是我们说到的标识符 它分为两种 一种是标准的结构显示 是11位的标识符 还有一种扩展的标识符 在原来的11位的基础上 加上18位的标识符 我们看2.0的通讯 它是都支持这两种数据格式的 这个图中可以看到 这是我们2837X里面 CAN通讯的内部的结构框图 MCU的CAN通讯模块是一个全功能的 CAN控制器 包含一个报文处理器 一个可控制数据发送和管理 可以存储数据的帧 模块采用CAN2.0 Bactive的规划 也就是模块可以接受和发送标准的帧 也就是11位的帧 和扩展的29位的标识符的帧 CAN控制器模块包含32个邮箱 这个邮箱用来存放数据长度 也就是每个报文接受的0到8个字节的数据长度 都是把数据存放到这个邮箱里面来的 这32个邮箱可以自由分配成接收邮箱或者发送邮箱 并且可以把它配置为标准的帧 接受标准的帧还是扩展的帧 CAN邮箱模块主要分为几个部分 一个是MID 也就是包含邮箱的标识符 我总线发送过来的数据 具体放到哪个邮箱里面 就是靠这个MID的标识符 判断是否接收或者把数据存放在邮箱里面 除了MID 邮箱还有报文的控制域符 MED 和MDH的两个数据存放的高低字节 CAN模块包含多个寄存器 它们分为五个组 分别存储在0X006 00 和0X0061F的数据存储器中 那五个标识符主要是控制和状态寄存器 还有本地接收的[听不清]mask码 还有我们报文的时间钟 还有对象等等 那我们最后总结一下 CAN通讯的话 主要有几个特点 首先它符合CAN2.0的通讯规范的 它支持高达1兆的BPS 也就是要求它的总线长度是少于40米的 还有它含有32个邮箱 这些邮箱可以配置成接受或发送 也可以配置成接收标准 或拓展的标识符 等等 而且在我们的2837X里面 我们的CAN通讯还有一个非常重要的功能 就是self test 自检模式 这个自检又分为好几个模式 自检模式 它的主要功能是 在我程序开发的时候 来判断我的CAN通讯的功能是否正常 好的
接下来我们讲一下控制器局域网CAN通讯
C2000里面的大部分芯片都会标配有CAN通讯接口
除了[听不清]系列里面的F2802X
那么我们新的F28系列里面 CAN通讯
我们叫做e-CAN也就是增强型的控制器
CAN通讯本身是德国博世公司提供的
用于汽车的一种性能组件 经过不断发展
形成了现有的国际标准 ISO11898
CAN通讯属于现场通讯
属于总线的范畴 是一种有效的支持
分布式控制 或者实时控制的创新通讯网络
我们的C2000里面的CAN通讯接口是符合CAN2.0标准的
最高的传输速度达到1兆
CAN通讯最大的特点是废除了传统的地址编码
取而代之是对通讯的数据块 来编码
这个编码叫做标志符
每条报文在发送的时候 有不同截点
可以识别的标识符 它有两种功能
用于报文的过滤和优先级的确定
标识符决定了CAN模块是否接收已发送的报文
如果有两个负责多个截点
要同时发送数据的时候
标识符还决定报文的优先级
我们看CAN通讯
所有截点都是挂在一个总线上
总线采用双绞线的方式 就是两根线就可以了
因此它的导线少 实现的成本也会比较低
而且假如说
线上有多个数据 进行传输
或者说线上有错误发生的时候
我们有冗余的错误降沿机制保证我的通讯可靠性会更高
接下来我们看看CAN通讯的总线
CAN通讯使用两线制的插动总线
也就是我们常说的双绞线
CANH和CANL每个截点是挂接到这个总线上面
总线会带有两个120欧姆的配备电阻
MCU利用发送器与CAN
进行总线通讯
CAN的总线是双绞线
传输速率决定了总线的长度
如果总线的长度低于40米的时候 它的传输速率最高达到
1兆BPS
我们看看每个模块是怎么挂到这个总线上来的
每个C2000芯片 内部都含有一个CAN的控制器
假如需要跟总线相连的话
这边需要一个CAN的tranceiver
也就是它的电频转换的芯片
我们推荐用TI Sn65HVD23X
接下来我们看看CAN通讯的工作原理
如何发送数据 以及数据发生冲突时如何仲裁
我刚才说了 CAN通讯的数据发送
都是基于标识符的 而不是基于地址
这么做的好处是首先总线上的节点数量
是不受限制的
第二是每个节点都能收到数据 去判断
这样它的实时性会有较大的提高
报文的内容是网络中唯一的标识符标志
比如邮箱的标识符
表示总线上是一个温度传感器 还是位置传感器
这些不同的节点
而且网络上所有的节点
都会接收到这个报文
每个节点会对报文进行接收测试
如果该报文是跟本接收点或本邮箱相关的
那么可以对它进行接收
如果不相关 把信号忽略掉
而且标识符具有可以决定报文的优先级
这样一个功能
当多个节点发送数据时
这些标识符决定某个报文享有的优先级的高低
我们看看这个无损按位中拆的机制
仲裁的主要原则是哪个节点的数字位越小
也就是它的标识符的数字越小
它的优先级越高
比如 在CAN的通信总线上
ABC同时在发送数据
我们看看它是如何仲裁的
首先 行驶完后 我在第一个时钟信号来判断
这个地方我们看到
B总线在下一个[听不清]是一个高电平
因此B在这个第一个时钟上升沿的时候
能取得总线的控制权
总线只保留了A和C
A和C现在还是低电平
我们看下一个时钟的上升沿的时候
我们看到A继续保持低电平
C跳转到了高电平
所以C丢失了总线的控制权
A获得了总线控制权
我们可以看到 这时候总线的信号跟A是完全一样的
这样的话 A总线获得了控制权
A总线继续发送数据
B和C这个节点 失去了总线的控制权
在BC的控制区里面 它会产生相应的警报
来告诉节点 控制器已经丢失了控制权
在下个时刻重新发送
我们看看CAN通讯的数据类型
和结构
CAN的报文格式 每个报文里面最主要的是数据位
每个报文都含有0到8个字节的数据
前面就是我们说到的标识符
它分为两种 一种是标准的结构显示
是11位的标识符
还有一种扩展的标识符 在原来的11位的基础上
加上18位的标识符
我们看2.0的通讯 它是都支持这两种数据格式的
这个图中可以看到 这是我们2837X里面
CAN通讯的内部的结构框图
MCU的CAN通讯模块是一个全功能的
CAN控制器 包含一个报文处理器
一个可控制数据发送和管理
可以存储数据的帧
模块采用CAN2.0
Bactive的规划 也就是模块可以接受和发送标准的帧
也就是11位的帧
和扩展的29位的标识符的帧
CAN控制器模块包含32个邮箱
这个邮箱用来存放数据长度
也就是每个报文接受的0到8个字节的数据长度
都是把数据存放到这个邮箱里面来的
这32个邮箱可以自由分配成接收邮箱或者发送邮箱
并且可以把它配置为标准的帧
接受标准的帧还是扩展的帧
CAN邮箱模块主要分为几个部分
一个是MID 也就是包含邮箱的标识符
我总线发送过来的数据
具体放到哪个邮箱里面 就是靠这个MID的标识符
判断是否接收或者把数据存放在邮箱里面
除了MID 邮箱还有报文的控制域符
MED 和MDH的两个数据存放的高低字节
CAN模块包含多个寄存器
它们分为五个组
分别存储在0X006 00 和0X0061F的数据存储器中
那五个标识符主要是控制和状态寄存器
还有本地接收的[听不清]mask码
还有我们报文的时间钟 还有对象等等
那我们最后总结一下
CAN通讯的话 主要有几个特点
首先它符合CAN2.0的通讯规范的
它支持高达1兆的BPS
也就是要求它的总线长度是少于40米的
还有它含有32个邮箱
这些邮箱可以配置成接受或发送
也可以配置成接收标准
或拓展的标识符
等等
而且在我们的2837X里面
我们的CAN通讯还有一个非常重要的功能
就是self test
自检模式 这个自检又分为好几个模式 自检模式 它的主要功能是
在我程序开发的时候
来判断我的CAN通讯的功能是否正常
好的
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
C2837x入门指南(二十五)—通信系统之CAN
所属课程:C2837x入门指南
发布时间:2016.07.12
视频集数:28
本节视频时长:00:10:02
C2837x概述;芯片架构; 开发环境;外设寄存器操作;复位和中断;系统初始化;模拟子系统 ADC DAC CMP SDFM;控制类外设PWM CAP QEP。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>