CAN协议.ppt_第1页
CAN协议.ppt_第2页
CAN协议.ppt_第3页
CAN协议.ppt_第4页
CAN协议.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CANOVERSPIARCHITECTURE UPS产品开发部软件课张登2005 6 22 2 40 内容简介 系统架构功能架构MGECAN协议SPI性能分析实现架构数据流数据结构遗留问题和思考总结 3 40 系统架构 背景介绍机种 MGEplaymobil15K 30K控制板 SCM3通讯对象 MGE显示板GDEV 4 40 系统架构 5 40 系统架构 通讯端点 GDEV和同一模块内的COREGDEV和另一模块内的COREGDEV和GDEV不同模块的CORE同一模块内的DSP和MCU 6 40 系统架构 通讯的内容 GDEV获得UPS内部的测量数据GDEV发送命令给CORE执行相应动作GDEV执行单机 并机初始化的流程参数的设置 7 40 功能架构 MCU的主要功能转发DSP和GDEV之间的通讯 不对数据做任何的解释EEPROM的数据的传输与DSP交换相关的采样数据 8 40 功能架构 DSP的主要功能分析GDEV的数据 做出相应的回复主动发送数据给GDEV通过CAN2转发GDEV的数据接受CAN2收到的数据并转发给GDEV与MCU交换EEPROM的数据与MCU交换相关的采样数据 9 40 MGECAN协议 传输特性波特率 500Kbit s帧格式 CAN2 0Bextendedframe最快传输速度 3ms frame 10 40 MGECAN协议 CANIDfield 11 40 MGECAN协议 CANDatafield 在一帧的8个byte的数据当中 1个byte用来对数据分片进行控制 第一个bit用来表示是否是第一帧数据 后面7个bit用来表示共有几帧数据以及该帧的编号 最长支持7 127 889bytes数据 12 40 MGECAN协议 MGECAN协议分析CAN最快的发送速度是每3ms一帧数据 因此 MCU处理CAN数据帧 转发给DSP 的速度必须快于3ms 否则需要做FIFO处理 在CAN协议中存在两种不同优先级的数据帧 因此每一种优先级必须有独立的FIFO 由于数据的分片 我们需要对分片的数据进行重组 在重组的过程中 由于两种不同的优先级的数据的存在 可以出现同一ID数据的两个分片当中存在高优先级的其他ID的数据 需要对这种情况进行处理需要数据的目的地址进行转发或者处理 13 40 SPI协议性能分析 SPI帧格式SPI物理特性由于MCU的SPI没有硬件的接收Buffer 因此我们采用的底层机制必须在保证系统能够正常工作的基础上提高传输速率 那么我们暂时将波特率定义为100kbits s 也就是12 5kbytes s 考虑到其他开销 实际上传送一个byte的时间是100us 就是说 mcu和dsp必须每100us处理一次spi中断 传送一帧CAN数据的最长时间 不考虑转义字节 为100us 1 1 4 8 1 1 1 6ms 14 40 SPI协议性能分析 SPI传输机制通讯由MASTER DSP 发起 采用半双工的通讯 每次发送一帧数据 如果不需要发送数据 那么发送一帧空数据 同样 SLAVE如果没有数据要发送 发送一帧空数据 如果需要发送数据 发送的内容由高层来决定 传输机制如图 15 40 SPI协议性能分析 SPI时间分析时间对比图如下 16 40 SPI协议性能分析 SPI时间分析从整个传输上来看 基本上达到了半双工通讯的极限 额外的开销仅为master和slave的处理时延 该时延应该是us级的时延 一个传送周期如下图示每发送一帧数据最长的时间是1 6ms 因此交换一次数据的最长时间可能是3 2ms 超过gdev的发送间隔 因此 MCU必须通过FIFO来缓存 17 40 CAN2传送能力分析 CAN2的速度决定了是否需要转发的FIFO对于目前的CAN协议 传送速度是每4ms4个byte 因此 需要转发FIFO来处理需要转发的数据 18 40 实现架构 19 40 数据流同一模组的GDEV到DSP的数据传输 同一模组的GDEV到DSP的数据传输选取有两个分片的数据 数据长度为10 数据为0 1 2 3 4 5 6 7 8 9 那么这些数据需要用两个CAN帧来发送 两个CAN帧的数据分别是 CANFRAME1 CANID0 x82 0 1 2 3 4 5 6CANFRAME2CANID0 x02 7 8 9如下图示 20 40 数据流同一模组的GDEV到DSP的数据传输 21 40 数据流同一模组的GDEV到DSP的数据传输 Step1 MCU接收到第一帧数据 并将其存入接收FIFOStep2MCU将第一帧数据封装在SPI的数据区 发送给DSP DSP将其存入接收链表 第二帧数据可能在此之前也可能在此之后被存入MCU的FIFObuffer Step3 MCU将第二帧数据通过SPI发送给DSP DSP将其加入到接收链表Step4 DSP搜索整个接收链表 发现有完整的数据收到 去掉分片的开销 将数据copy到输出buffer 交给AP层进行解析 22 40 数据流同一模组的DSP发送数据给GDEV 同一模组的DSP发送数据给GDEV当DSP需要发送数据给GDEV的时候 执行如下的动作 我们仍然以以上数据为例 23 40 数据流同一模组的DSP发送数据给GDEV Step1 用户有数据需要发送 申请数据节点 将用户请求压入发送队列 可以根据数据类型决定压入高优先级还是低优先级队列Step2 取出当前需要发送的用户请求 高优先级的队列优先 这时如果还有其他用户数据需要发送 在队列中排队 发送当前用户请求的第一帧数据 Step3 发送当前用户请求的第二帧数据 发送完毕后 释放用户数据节点 Step4 继续取出发送队列中的内容 继续发送数据 24 40 数据流不同GDEV间的通讯 不同GDEV间的通讯当AP收到的数据经过filter动作后发现是需要转发的给其他模组的gdev的数据时 需要将所有的数据进行转发 由于内部CAN协议 CAN2 和CAN1的格式不同 因此MGECAN数据帧的ID也必须在CAN2的数据当中传输假设需要转发的数据ID 0 xCC502 数据部分有4个byte 分别为0 1 2 3 共长8byte 如下图 25 40 数据流不同GDEV间的通讯 26 40 数据流不同GDEV间的通讯 Step1 将需要转发的数据压入转发队列Step2 取出需要转发的数据 把id和数据都当成CAN2的净荷进行发送 CAN2每帧中有4个Byte可以用于传送数据 因此需要两帧进行传送 发送第一帧数据Step3 发送第二帧数据 接收的DSP收齐两帧数据后 将数据压入发送队列Step4 发送后续数据 27 40 数据结构memory管理 为节省memory使用 必须使用动态的内存分配 以满足不同请求的需要 在以下场合需要分配ram插入一个发送请求插入一个转发请求插入一个接收数据帧为提高AP程序的效率和透明性 使用了一种固定大小的动态内存分配方案 每个节点均有一个长度标示和一个数据域用来存储用户的数据 同时利用一个next指针组成单向链表 28 40 数据结构memory管理 每次需要分配一个节点的时候 取出pFreeList指向的数据节点即可 同时将pFreeList指向下一个节点当使用完这个节点时 将其插入链表的最前端即可 对应不同的数据请求 有不同的数据长度 为节省ram的使用 使用三种不同长度的数据节点分别构成三个不同的链表来进行处理 三种典型的长度分别是8 16和120分别对应1个分片 2个分片和15个分片的CAN数据 根据AP的需求 三种长度数据的节点个数分别是30 20 2 对于高层来讲 只看到两个操作 get操作和free操作 会根据需要分配单元的大小自动寻找合适大小的节点 void spGetSpiMem INT16Ulength voidsFreeSpiMem void pnode 29 40 数据结构数据请求 在需要发送或者需要转发或者需要接收的时候 需要对数据进行队列处理 队列的内容需要保存CAN的所有数据 存储CAN帧的数据结构如下 IDField 30 40 数据结构数据请求 CANrequest一个CAN的数据请求包括一个CANID和一个指向数据节点的指针 通过对REQUEST的队列处理 可以实现CAN数据的缓存 如下图示 31 40 数据结构MCUFIFO 由于MCU侧的接收队列仅对一帧CAN数据进行缓存 而不是重组后的数据 因此MCU的接收队列不需要动态的分配节点的大小 而是使用固定的长度为8的队列 其控制逻辑如下图 D使用ADD和GET操作插入和取出一个CAN帧 32 40 数据结构DSP发送队列 转发队列 由于DSP的发送请求和转发请求都是针对用户数据的 是将分片组合后的数据 其长度可能超过8个byte 所以队列的内容不再是固定长度的can数据帧 而是CANrequest 控制结构如下 同样通过add和get操作进行插入和取出 33 40 数据结构DSP接收重组 由于GDEV的数据可能有很多的分片并且可能出现不同ID的分片混杂的现象出现 因此对接收的处理比较复杂 需要对所有接收到的数据进行缓存处理 并且可以根据不同的优先级使用不同的FIFO处理 也可以用使用一个双向的链表保存所有的数据 并通过搜索整个链表来找出已经收齐的数据 同时 对于很长时间没有收齐的数据 需要做超时处理 数据结构如下图 34 40 数据结构DSP接收重组 对于这样的链表有两个操作 Add操作和delete操作 往链表中加入一个节点或者删除一个节点 系统维护两个链表 free链表和busy链表 free链表用来存储未使用的节点 而当接收到数据时 从free链表取出一个节点 加入到busy链表的最后 每加入一个新的数据 那么就会搜索整个busy链表 根据数据字段的第一个byte去检查是否有完整的数据收到 如果有完整的数据收到 那么将数据去掉该字节后重组 放入输出buffer中 并将属于该ID的所有节点从busy链表中删除 加入到free链表 如果超过了timerout仍没有收齐所有分片 那么也将属于该ID的所有节点从busy链表中删除 加入到free链表 35 40 遗留问题和思考 以上结构虽然得以实现但比较复杂越来越多的客户需要CAN通讯 而且很多使用自己的CAN协议 36 40 遗留问题和思考利用现有平台实现的架构 SCM3 SCM1 SCM1仅有一个CANBUS的资源 因此必须使用同一个CANBUS 对于SCM3也可以使用同一个CANBUS 客户的协议和我们的协议在同一个CANBUS上并存 拓扑如下优点 不需要额外的资源缺点 必须区分用户协议格式和我们内部的格式或者修改我们的协议数据存在冲突 不容易安排时隙 37 40 遗留问题和思考利用现有平台实现的架构 SCM3 SCM1 对于SCM3 MCUDJ128仍然有一个CANBUS 除了我们现在使用的结构 还可以有如下结构 将MCU的CANBUS都连接在一起优点不需要通过CAN2进行用户数据的转发缺点仍然需要SPI协议进行发送 38 40 遗留问题和思考可能之规划 选用具有双CAN的处理器 拓扑如下 优点同一个CPU简化通讯内部协议和客户

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论