0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于恩智浦MPC5744P的SAE J1939协议栈开发

嵌入式程序员 来源:嵌入式程序猿 作者:嵌入式程序猿 2021-09-24 16:15 次阅读

摘要

本篇笔记主要记录基于恩智浦MPC5744P的SAE J1939协议栈开发,接口设计,以之前总结的CAN驱动设计为基础。

准备工作

准备一个CAN驱动可以正常工作的工程。

熟悉J1939协议文档和标准,特别是J1939-21和J1939-81。

CAN

恩智浦的MPC5744P控制器局域网络CAN,跟我们之前使用的恩智浦Kinetis KV, 等系列的flexCAN结构基本是一样的,MPC5744P 支持CAN2.0B。CAN 的高层协议,J1939 是基于CAN2.0B的扩展帧,29位标识符,支持单帧和多帧收发通信。本次设计主要实现SAE J1939 数据链路层和网络管理层。

J1939和CAN接口

接口函数

基于上次做好的CAN驱动提供一个发送函数,一个接收处理函数,作为与J1939协议栈的接口,来完成J1939所有功能的实现和应用。

9e8ce072-14ca-11ec-8fb8-12bb97331649.png

接收接口用于获取总线上的CAN报文帧,然后交由J1939的处理函数解析。这里发送函数未列出。

数据类型

根据J1939的标准和要求特定义以下数据类型,方便程序的开发和应用

9ecbb4aa-14ca-11ec-8fb8-12bb97331649.png

J1939对外接口

J1939对外接口除过初始化,就一个函数,所有功能在这个函数里实现,因为J1939协议栈内部有很多时基,设计的是基于10ms,所以这个函数放在10ms里调用。

9ed59c86-14ca-11ec-8fb8-12bb97331649.png

9eeb29b6-14ca-11ec-8fb8-12bb97331649.png

测试

SAE J1939协议是CAN的高层协议,是一种广泛应用于重型车,特种车,农机,以及非路面设备车辆等。

SAE J1939 协议栈 主要参考标准J1939-21 数据链路层, J1939-81 网络管理层 。标准的详细内容请参考SAE 的J1939标准。

9f3e3d22-14ca-11ec-8fb8-12bb97331649.png

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    56

    文章

    2459

    浏览量

    459052
  • 数据链路层
    +关注

    关注

    0

    文章

    51

    浏览量

    11943
  • 接口函数
    +关注

    关注

    0

    文章

    10

    浏览量

    8155

原文标题:SAE J1939在恩智浦MPCxxx上实现

文章出处:【微信号:InterruptISR,微信公众号:嵌入式程序员】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32WB55RG是否可以使用j-flash通过j-link烧录协议和FUS bin文件?

    硬件基于STM32WB55RG是否可以使用j-flash通过j-link烧录协议和FUS bin文件?
    发表于 03-12 07:14

    求助,为什么在CAN数据库(.dbc文本文件)中找不到报文?

    我有CAN数据库(dbc文件)。这是一个文本文件。此文件的扩展名为 dbc。在Vector CANdb++编辑器中打开它时,将填充J1939报文和CAN ID。 但是,在.dbc文本文件中找不到
    发表于 01-23 06:28

    SAE J1939网络层与应用层#J1939 #汽车总线

    汽车总线网络层
    北汇信息POLELINK
    发布于 :2023年11月27日 11:23:33

    SAE J1939数据链路层#J1939 #汽车总线

    数据汽车总线
    北汇信息POLELINK
    发布于 :2023年11月21日 15:54:14

    SAE J1939协议解读--什么是J1939?#汽车总线 #J1939

    汽车总线
    北汇信息POLELINK
    发布于 :2023年11月15日 18:16:32

    SAE J1939协议解读

    在乘用车领域比较熟知的是CAN(FD)、LIN、FlexRay、Ethernet等通信协议,但对于J1939往往所知甚少。其实在CAN总线协议诞生之初,J1939
    的头像 发表于 11-09 08:25 1207次阅读
    <b class='flag-5'>SAE</b> <b class='flag-5'>J1939</b><b class='flag-5'>协议</b>解读

    CAN:使用ST STM32 Cortex-M处理器的控制器区域网络实验室

    CAN在汽车上得到了广泛的应用,但它的应用无处不在。 CAN有许多“应用”层可用,如ISO 15765(轿车)、J1939(卡车)、DeviceNet和CANOpen(两者都用于工厂自动化),但开发
    发表于 09-04 06:56

    NuMicro NUC131的特点

    ,显示在 7 吋 TFT-LCD 面板上。 设计特点 支持以下协议 ISO 15765-4 CAN SAE J1850 PWM/ VPW SAE
    发表于 08-28 06:42

    CAN总线之J1939地址定义

    SAE J1939(以下简称J1939)是美国汽车工程协会(SAE)的推荐标准,广泛用于是商用车(重卡、大客车等道路车辆和工程机械、农业机械、轨道机车、船舶等非道路车辆及设备)上电子部
    的头像 发表于 08-15 10:47 1898次阅读
    CAN总线之<b class='flag-5'>J1939</b>地址定义

    MPC5744p如何优化程序执行时间?

    作为 MPC5744p 的新手,我遇到了一个关于如何优化程序执行时间的问题。 这是我的中断服务例程中代码行的图片。 ↓这张图片显示了执行我测试过的代码行之前的定时器值 ↓这张图片显示了执行我测试
    发表于 06-05 12:50

    求助,索取有关在带有MPC5744P MCU的RD33771 EVB中启用锁步功能的文档

    我目前正在从事电池管理系统 (BMS) 项目并使用 RD33771 EVB以及开发软件由 NXP 提供用于开发目的。该板配备MPC5744P微控制器,支持锁步功能。 如果您能协助我提供有
    发表于 05-24 08:27

    有没有办法在MPC5744P中为每个应用程序配置一个内存区域而不必为每个区域设置进程ID ?

    你好 有没有办法在MPC5744P中为每个应用程序配置一个内存区域而不必为每个区域设置进程ID ?
    发表于 05-05 07:25

    MPC5744P上的CAN ID掩码问题求解

    我遇到了一个关于 CAN ID 过滤器的问题。以下是我的代码的一部分 我应该得到 CAN 消息的 0x7XX 和 0x6XX ID,但它只得到 0x700 和 0x600。而IRMQ是1。 然后我把IRMQ改成0,检查了一下,它只得到了ID为0x700和0x600的CAN,IRMQ是0。IRMQ 和RXIMR设置在冻结模式下,进入冻结模式的代码就像 while (!CAN_0.MCR.B.FRZACK) {} /* 等待冻结确认设置 */ ...... while (CAN_0.MCR.B.FRZACK &amp;amp; CAN_0.MCR.B.NOTRDY) {} /*等待清除 */ 另一个有趣的事情是,当我将 IRMQ 设置为 1 时,它会在收到 CAN 消息中断后更改。那是正常的吗? 关于这些问题有什么建议吗?谢谢!
    发表于 05-04 08:45

    有没有方法可以在fleetwise agent中一起完成J1939J1979?

    我的用例是通过 CAN0-OBD 接口获取 GNSS(LAT,LON) 值。但是由于 GNSS 数据带有 J1939 标准,而不是目前 fleetwise 配置的 J1979。 任何人都可以帮助
    发表于 04-25 08:57

    软件如何判断MPC5777C当前正在使用哪种模式?

    MPC5777C 如何检测 XOSC 模式的故障(旁路模式外部时钟连接到 EXTAL 引脚与使用外部振荡器)?软件如何判断 MPC5777C 当前正在使用哪种模式?参考手册称 XOSC 没有任何软件可访问寄存器,因此不清楚
    发表于 04-25 06:17