收藏 分享(赏)

CAN协议简介.ppt

上传人:myw993772 文档编号:8543448 上传时间:2019-07-02 格式:PPT 页数:40 大小:664KB
下载 相关 举报
CAN协议简介.ppt_第1页
第1页 / 共40页
CAN协议简介.ppt_第2页
第2页 / 共40页
CAN协议简介.ppt_第3页
第3页 / 共40页
CAN协议简介.ppt_第4页
第4页 / 共40页
CAN协议简介.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、CAN OVER SPI ARCHITECTURE UPS 产品开发部 软件课 张登 2005/6/22 2/40 内容简介 系统架构 功能架构 MGE CAN 协议 SPI性能分析 实现架构 数据流 数据结构 遗留问题和思考 总结 3/40 系统架构 背景介绍 机种 :MGE playmobil 15K/30K 控制板: SCM3 通讯对象: MGE显示板 GDEV 4/40 系统架构 GDEVCANHCANLCANL CANHModule1CAN2CAN1DSP2812MCUDJ128Santak coreMISOMOSICLKSPIDSP2812MCUDJ128GDEVSantak co

2、reModule25/40 系统架构 通讯端点 : GDEV和同一模块内的 CORE GDEV和另一模块内的 CORE GDEV和 GDEV 不同模块的 CORE 同一模块内的 DSP和 MCU 6/40 系统架构 通讯的内容: GDEV获得 UPS内部的测量数据 GDEV发送命令给 CORE执行相应动作 GDEV执行单机 /并机初始化的流程 参数的设置 7/40 功能架构 MCU的主要功能 转发 DSP和 GDEV之间的通讯,不对数据做任何的解释 EEPROM的数据的传输 与 DSP交换相关的采样数据 8/40 功能架构 DSP的主要功能 分析 GDEV的数据,做出相应的回复 主动发送数据给

3、 GDEV 通过 CAN2转发 GDEV的数据 接受 CAN2收到的数据并转发给 GDEV 与 MCU交换 EEPROM的数据 与 MCU交换相关的采样数据 9/40 MGE CAN协议 传输特性 波特率: 500Kbit/s 帧格式: CAN 2.0B extended frame 最快传输速度: 3ms/frame 10/40 MGE CAN协议 CAN ID field 11/40 MGE CAN 协议 CAN Data field: 在一帧的 8个 byte的数据当中, 1个 byte用来对数据分片进行控 制 :第一个 bit用来表示是否是第一帧数据,后面 7个 bit用来表示共有几帧

4、数据以及该帧的编号:最长支持 7*127=889bytes数据 12/40 MGE CAN 协议 MGE CAN 协议分析 CAN最快的发送速度是每 3ms一帧数据,因此, MCU处理 CAN数据帧(转发给 DSP) 的速度必须快于 3ms, 否则需要做 FIFO处理。 在 CAN协议中存在两种不同优先级的数据帧,因此每一种优先级必须有独立的 FIFO。 由于数据的分片,我们需要对分片的数据进行重组。在重组的过程中,由于两种不同的优先级的数据的存在,可以出现同一 ID数据的两个分片当中存在高优先级的其他 ID的数据。需要对这种情况进行处理 需要数据的目的地址进行转发或者处理 13/40 SPI

5、协议性能分析 SPI帧格式 SPI物理特性 由于 MCU的 SPI没有硬件的接收 Buffer, 因此我们采用的底层机制必须在保证系统能够正常工作的基础上提高传输速率,那么我们暂时将波特率定义为 100k bits/s, 也就是 12.5k bytes/s。 考虑到其他开销,实际上传送一个 byte的时间是100us, 就是说, mcu和 dsp必须每 100us处理一次 spi中断。 传送一帧 CAN数据的最长时间(不考虑转义字节)为100us (1+1+4+8+1+1)=1.6ms 14/40 SPI协议性能分析 SPI 传输机制 通讯由 MASTER( DSP) 发起,采用半双工的通讯,

6、每次发送一帧数据,如果不需要发送数据,那么发送一帧空数据。同样, SLAVE如果没有数据要发送 ,发送一帧空数据。如果需要发送数据,发送的内容由高层来决定。传输机制如图 : M aster(D SP)Sl ave(M C U )1ms timer15/40 SPI协议性能分析 SPI时间分析 时间对比图如下: 16/40 SPI协议性能分析 SPI时间分析 从整个传输上来看,基本上达到了半双工通讯的极限,额外的开销仅为 master和 slave的处理时延,该时延应该是 us级的时延,一个传送周期如下图示 每发送一帧数据最长的时间是 1.6ms, 因此交换一次数据的最长时间可能是 3.2ms。

7、 超过 gdev的发送间隔,因此, MCU必须通过 FIFO来缓存 17/40 CAN2传送能力分析 CAN2的速度决定了是否需要转发的 FIFO 对于目前的 CAN 协议,传送速度是每 4ms 4个 byte, 因此,需要转发 FIFO来处理需要转发的数据。 18/40 实现架构 FilterHeadDJ128Rx FIFOCAN1FragmentationListHigh prioTX FIFOUser DataTransmit FIFOLow PrioTX FIFOSPI FrameSPI FrameFormatConvertTX REQTimerMGE CAN IDMGE CANfra

8、gmentationdataMGE CAN data SPI overhead SANTAK CAN IDDSP2812High prioTX FIFOLow PrioTX FIFOTX REQFilterDJ128SPI FrameCAN2CAN1parsingFragReqFragReqSpidriverSpidriverFormatConvertSpidriverFormatConvertSpidriverSpidriverSpidriver19/40 数据流 同一模组的 GDEV到 DSP的数据传输 同一模组的 GDEV到 DSP的数据传输 选取有两个分片的数据,数据长度为 10,数据

9、为 0,1, 2, 3, 4, 5, 6, 7, 8, 9,那么这些数据需要用两个 CAN帧来发送,两个 CAN帧的数据分别是: CAN FRAME1: CANID 0x82, 0, 1, 2, 3, 4, 5, 6 CAN FRAME2 CANID 0x02, 7, 8, 9 如下图示 20/40 数据流 同一模组的 GDEV到 DSP的数据传输 112211Head22Head1HeadnullUserdatanullHeadCAN1MCU RXFIFOSPIRxListRxDatastep1step2step3step410x82,0,1,2,3,4,5,62 0x02,7,8,90,1

10、,2,3,45,6,7,8,9UserdataCAN IDSPIoverhead21/40 数据流 同一模组的 GDEV到 DSP的数据传输 Step1: MCU接收到第一帧数据,并将其存入接收FIFO Step2 MCU将第一帧数据封装在 SPI的数据区,发送给 DSP, DSP将其存入接收链表。第二帧数据可能在此之前也可能在此之后被存入MCU的 FIFO buffer. Step3: MCU将第二帧数据通过 SPI发送给 DSP,DSP将其加入到接收链表 Step4: DSP 搜索整个接收链表,发现有完整的数据收到,去掉分片的开销,将数据 copy到输出 buffer,交给 AP层进行解析

11、。 22/40 数据流 同一模组的 DSP发送数据给 GDEV 同一模组的 DSP发送数据给 GDEV 当 DSP需要发送数据给 GDEV的时候,执行如下的动作 ::我们仍然以以上数据为例, step2step3step410x82,0,1,2,3,4,5,62 0x02,7,8,90,1,2,3,45,6,7,8,9Userdata1CAN IDSPIoverhead1Userdata11 11 2Userdata2222 . . .step1Formatconverter12FormatconverterAPPDataTxFIFORequest SPI MCU CAN123/40 数据流

12、同一模组的 DSP发送数据给 GDEV Step1: 用户有数据需要发送,申请数据节点,将用户请求压入发送队列,可以根据数据类型决定压入高优先级还是低优先级队列 Step2: 取出当前需要发送的用户请求,高优先级的队列优先,这时如果还有其他用户数据需要发送,在队列中排队。发送当前用户请求的第一帧数据。 Step3: 发送当前用户请求的第二帧数据,发送完毕后,释放用户数据节点。 Step4: 继续取出发送队列中的内容,继续发送数据 24/40 数据流 不同 GDEV间的通讯 不同 GDEV间的通讯 当 AP收到的数据经过 filter动作后发现是需要转发的给其他模组的 gdev的数据时,需要将所

13、有的数据进行转发,由于内部 CAN协议( CAN2) 和 CAN1的格式不同,因此 MGE CAN数据帧的 ID也必须在 CAN2的数据当中传输 假设需要转发的数据 ID=0xCC502 ,数据部分有 4个byte, 分别为 0,1,2,3。共长 8 byte, 如下图: 25/40 数据流 不同 GDEV间的通讯 step2step3step40,1,2,3,4,5,6,7Userdata1CAN ID0xCC502SANTAK CANIDUserdata1Userdata22. . .step1APPDataTransmitFIFORequest CAN2112112112SANTAKFr

14、agmentation1=4 byte ID+0,11SANTAKFragmentation2=2,3,4,5,6,72RxbufferTXFIFOModule 1Module 2226/40 数据流 不同 GDEV间的通讯 Step1: 将需要转发的数据压入转发队列 Step2: 取出需要转发的数据,把 id和数据都当成 CAN2的净荷进行发送, CAN2每帧中有 4个 Byte可以用于传送数据,因此需要两帧进行传送,发送第一帧数据 Step3: 发送第二帧数据,接收的 DSP收齐两帧数据后,将数据压入发送队列 Step4: 发送后续数据 27/40 数据结构 memory管理 为节省 me

15、mory使用,必须使用动态的内存分配,以满足不同请求的需要。在以下场合需要分配 ram 插入一个发送请求 插入一个转发请求 插入一个接收数据帧 为提高 AP程序的效率和透明性,使用了一种固定大小的动态内存分配方案:每个节点均有一个长度标示和一个数据域用来存储用户的数据,同时利用一个 next指针组成单向链表 LengthData*pNextLengthData*pNextLengthData*pNextpFreeList28/40 数据结构 memory管理 每次需要分配一个节点的时候,取出 pFreeList指向的数据节点即可,同时将 pFreeList指向下一个节点 当使用完这个节点时,将

16、其插入链表的最前端即可。 对应不同的数据请求,有不同的数据长度,为节省 ram的使用,使用三种不同长度的数据节点分别构成三个不同的链表来进行处理。 三种典型的长度分别是 8, 16 和 120分别对应 1个分片, 2个分片和 15个分片的 CAN数据。根据 AP的需求,三种长度数据的节点个数分别是 30, 20, 2。 对于高层来讲,只看到两个操作, get操作和 free操作,会根据需要分配单元的大小自动寻找合适大小的节点。 void *spGetSpiMem(INT16U length); void sFreeSpiMem(void *pnode); 29/40 数据结构 数据请求 在需要

17、发送或者需要转发或者需要接收的时候,需要对数据进行队列处理。队列的内容需要保存 CAN的所有数据。存储 CAN帧的数据结构如下: ID Field bPrio 1bitbDataSort 1bitbPDU 1bitwID 12bitSrc equipment 4bitSrc board 3bitDes equipment 4bitDes board 3bitReserved 2bitMSBLSBHigh wordLow word30/40 数据结构 数据请求 CAN request 一个 CAN的数据请求包括一个 CAN ID 和一个指向数据节点的指针。通过对 REQUEST的队列处理。可以实现 CAN数据的缓存 ,如下图示: *pDataRequestunCanIdLengthData*pNextCanRequest

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报