笔者最近在调试28377系列DSP芯片的can通讯时,遇到一个小问题,百思不得姐~

起因是这样的,在设计一个多单元并联的系统,所有单元使用can总线进行通讯,当通讯端口,can外设,以及相关通讯协议都设计好后,开始使用上位机进行通讯调试时,发现上位机可以正常接收到dsp通过can发送的数据,但检测dsp中的接收缓存,始终看不到上位机下发的数据。

于是,笔者反复排查can模块的配置,can邮箱的配置,以及相关变量的设计等,但并没有找到问题所在。

经过了半天时间,突然想到是否是上位机下发数据格式问题,再次检查上位机下发数据,发现在下发数据设置中勾选了Extended Frame(扩展帧格式)选项。

按照我在dsp中对can的调用,本意是使用扩展帧的,但实际在配置Can信息ID时,因为单元数量并不多,ID虽然是按照29位格式配置,但数值实际只是1到10这样子,比如其中一个是“0x00000006”。

这里简单介绍一下Can总线中,标准帧和扩展帧的区别,标准帧是使用11bit位作为ID识别,扩展帧使用29bit位作为ID识别,具体就不再赘述了,相关对can总线稍有了解的同学就知道这个ID识别的作用。

那么回到我们的问题中来,实际上28377系列芯片对于Can总线使用标准帧还是扩展帧是怎么配置的呢?注意,和28335或者2812等以前的Can结构是不一样的,所以28377系列配置方法有区别哦,对于can的信息帧是扩展帧还是标准帧,28377系列使用其对应库里相关的CANMessageSet(uint32_t ui32Base, uint32_t ui32ObjID, tCANMsgObject *pMsgObject, tMsgObjType eMsgType)函数进行配置,具体相关的配置语句是这样的:

// See if we need to use an extended identifier or not.
    if((pMsgObject->ui32MsgID > CAN_MAX_11BIT_MSG_ID) ||
       (pMsgObject->ui32Flags & MSG_OBJ_EXTENDED_ID))
    {
        bUseExtendedID = 1;
    }
    else
    {
        bUseExtendedID = 0;
    }

其中,CAN_MAX_11BIT_MSG_ID = 0x7ff,MSG_OBJ_EXTENDED_ID = 0x00000004

简要解释一下上面的意义,就是说,在配置can的MsgObject变量时,判断其ui32MsgID(Can信息ID)值的大小,如果大于0x7ff则自动配置为扩展帧,0x7ff正是11bit位ID的最大值;或者,判断ui32Flags标志,如果其bit2位是1,则也配置为扩展帧。

检查了笔者对于can相关MsgObject配置,发现其ui32MsgID小于0x7ff,而ui32Flags又默认配成了0,所以,实际上dsp是以标准帧格式在接收数据的。

原因找到了,解决起来也很简单,上位机取消勾选扩展帧格式,按照标准帧发送,则dsp正常接收。或者,上位机发送设置不变,dsp通过将can的接收MsgObject的ui32MsgID配置为大于0x7ff的值,或者将ui32Flags配置为0x00000004,则dsp可以扩展帧格式正常接收上位机信息。

记28377系列芯片中Can总线标准帧和扩展帧该怎么设置?的更多相关文章

  1. nxp的layerscape系列芯片中的rcw指定了一些什么信息

    答:指定了一些可以配置的硬件信息(如可以配置uart相关的引脚功能).引导镜像(uboot)的读取地址以及从何种介质(flash,sd)启动系统的信息

  2. CAN帧格式(标准帧、拓展帧)

    CAN2.0B标准帧 CAN 标准帧信息为11个字节,包括两部分:信息和数据部分.前3个字节为信息部分. 位置 7 6 5 4 3 2 1 0 字节01 FF RTR × × DLC(数据长度) 字节 ...

  3. CAN总线学习系列之二——CAN总线与RS485的比较

    CAN总线学习系列之二——CAN总线与RS485的比较 上 一节介绍了一下CAN总线的基本知识,那么有人会问,现在的总线格式很多,CAN相对于其他的总线有什么特点啊?这个问题问的好,所以我想与其它总线 ...

  4. 【ARM】S5PV210芯片中的BL0的作用

    S5PV210芯片中的BL0的作用:(1)关闭看门狗:(2)清除指令寄存器:(3)初始化栈区域:(4)初始化堆区域:(5)初始化块设备复制功能:(6)初始化PLL和设置系统时钟:(7)拷贝BL1到片内 ...

  5. CAN总线标准帧

    CAN总线是一种串行数据通信协议,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充.数据块编码.循环冗余检验.优先级判别等项工作. CAN总线结构 CAN总 ...

  6. 浅入 ABP 系列(4):事件总线

    浅入 ABP 系列(4):事件总线 版权护体作者:痴者工良,微信公众号转载文章需要 <NCC开源社区>同意. 目录 浅入 ABP 系列(4):事件总线 事件总线 关于事件总线 为什么需要这 ...

  7. STM32——CAN协议帧的标准格式和扩展格式与优先级的关系

    一.CAN数据帧的标准格式和扩展格式 我们知道CAN总线上的数据帧都可以配置一个ID号,其可以为11位(标准ID格式)或者29位(扩展ID格式),这也是数据帧的标准格式和扩展格式的区别所在. 这个ID ...

  8. Echarts-地图扩展-标准geoJson格式扩展地图-例子

    本人菜鸟一枚,最近搞echarts地图.看到官方给的“标准geoJson格式扩展地图-全国主要城市”的例子,瞬间就蒙逼了.不怪人官网的例子不好,实在是我看不懂它是怎么弄得.最后折腾了一晚上,最后终于弄 ...

  9. PipelineDB 1.0.0 发布——使用标准的pg 扩展开发模型

    PipelineDB 1.0.0 发布已经发布了,现在的已经成为一个标准的pg 扩展了,语法也有变动 create continous view 修改为了view,create streaem 修改为 ...

随机推荐

  1. rust cargo 一些方便的三方cargo 子命令扩展

    内容来自cargo 的github wiki,记录下,方便使用 可选的列表 cargo-audit - Audit Cargo.lock for crates with security vulner ...

  2. CURL shell 使用

    #! /bin/bash requrl="http://www.baidu.com/xxxxxx" while true do html=$(curl -s "$requ ...

  3. SQL基础-建表

    一.建表 1.创建表的两种方式 *客户端工具 *SQL语句 2.使用SQL语句创建表 表名和字段名不能使用中文:(一般为字母开头,字母.数字.下划线组成的字符串): CREATE TABLE关键字后跟 ...

  4. 洛谷P1560 蜗牛的旅行

    题目 搜索,注意判断特殊情况,并且区分开什么时候转弯什么时候停止.然后转弯的时候更是要注意是否会进入障碍. #include <bits/stdc++.h> using namespace ...

  5. js中forEach,for in,for of循环的用法详解

    一.一般的遍历数组的方法: var array = [1,2,3,4,5,6,7]; for (var i = 0; i < array.length; i) { console.log(i,a ...

  6. 「ZJOI2019」麻将

    传送门 Solution  对于条件一:记录一个\(cnt\)表示牌个数\(≥2\)的个数 设\(dp_{i,0/1,j,k}\)表示考虑了\(1...i\),当前是否有对子,以\(i-1\),\(i ...

  7. 懵了!简单的HTTP调用,时延竟如此大?

    最近项目测试遇到个奇怪的现象,在测试环境通过 Apache HTTP Client 调用后端的 HTTP 服务,平均耗时居然接近 39.2ms. 图片来自 Pexels 可能乍一看觉得这不是很正常吗, ...

  8. openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息

    openresty开发系列40--nginx+lua实现获取客户端ip所在的国家信息 为了实现业务系统针对不同地区IP访问,展示包含不同地区信息的业务交互界面.很多情况下系统需要根据用户访问的IP信息 ...

  9. spring cloud Eureka server 问题 Spring Cloud java.lang.TypeNotPresentException

    版本: spring-cloud.version : Greenwich.SR2 pom配置: <project xmlns="http://maven.apache.org/POM/ ...

  10. [译]使用BeautifulSoup和Python从网页中提取文本

    如果您要花时间浏览网页,您可能遇到的一项任务就是从HTML中删除可见的文本内容. 如果您使用的是Python,我们可以使用BeautifulSoup来完成此任务. 设置提取 首先,我们需要获取一些HT ...