APP下载

基于μC/OS-Ⅲ的车载网关控制器设计

2023-10-24曹清源钱宏文

物联网技术 2023年10期
关键词:收发器描述符微控制器

曹清源,杨 涛,钱宏文

(中国电子科技集团公司第五十八研究所,江苏 无锡 214035)

0 引 言

车载网关控制器作为汽车上不同总线或网段数据交互的中枢,是汽车总线系统的核心工作单元,对车载网关系统的设计优化具有重要意义[1-2]。由于车载网关控制器工作环境较为苛刻,且对硬件成本限制极为严格,因此车载网关控制器通常使用车规级专用微控制器设计实现[3-4]。因此,数据传输实时性和运行可靠性是车载网关控制器的核心性能。

基于车规级专用微控制器的车载网关控制器通常有两种软件设计方案:基于操作系统的软件设计和无操作系统的软件设计。相对于无操作系统的软件设计,基于操作系统的软件设计具有实时性高、可靠性好和扩展能力强等优势。因此设计基于嵌入式操作系统的车载网关控制器是提高车载网关控制器性能的重要手段。

本文提出一种基于μC/OS-Ⅲ的车载网关控制器设计方案,主要包括网关控制器硬件设计、操作系统的移植和通信软件设计。最后,使用专用测试工具和上位机软件对网关的数据传输能力进行测试。结果表明,本文设计的网关控制器能有效保证网关功能可靠性和数据传输实时性。

1 硬件方案设计

1.1 原理框图

网关控制器硬件框图如图1 所示。该网关控制器选用NXP 公司的Power 内核MPC5646C 作为微控制器器。CAN接口选用TI 公司的TCAN1042 作为CAN 总线收发器,以太网接口选用NXP 公司生产的TJA1100 车载以太网收发器。

图1 网关控制器硬件框图

1.2 网关微控制器

网关微控制器是由NXP 公司提供的32 位单片机MPC5646C,属于Power 架构,具有e200z0h 和e200z4h 双内核处理器功能、更强的数据处理能力、更大的数据存储空间和更低的功耗[5-6]。

1.3 CAN 收发器TCAN1042

本文采用的CAN 收发器型号为TCAN1042。该芯片是TI 公司生产的一款具有CAN FD 和故障保护功能的汽车类CAN 收发器,这款 CAN 收发器系列符合 ISO1189-2 (2016)高速CAN 物理层标准。所有器件均设计用于数据速率高达2 Mb/s 的 CAN FD 网络。图2 为CAN 接口硬件设计原理图[7]。

图2 CAN 接口硬件设计原理图

1.4 车载以太网收发器TJA1101

TJA1101 是NXP 公司生产的符合100BASE-T1 标准的以太网收发器。该器件支持在一对非屏蔽双绞线上实现100 Mb/s 的收发能力,传输线长度可达15 m 以上。TJA1101可以在保持汽车应用所需鲁棒性的同时,减小电源损耗和系统整体费用。图3 为以太网收发器接口原理图。

图3 以太网收发器接口原理图

2 通信软件设计

2.1 操作系统移植

为了方便移植,μC/OS-Ⅲ的绝大部分代码使用C 语言编写[8]。但在移植时,仍需要用C 语言和汇编语言编写与处理器相关的代码。μC/OS-Ⅲ中操作CPU 寄存器的代码,仍只能使用汇编语言编写,除非C 编译器支持内嵌汇编语言。图6 给出了μC/OS-Ⅲ的结构以及它与其他软件文件和硬件的关系。使用μC/OS-Ⅲ时,需要编写应用软件代码,并配置μC/OS-Ⅲ。

μC/OS-Ⅲ的移植工作包括4 个内核相关文件,分别是os_cpu.h、os_cpu_a.s、os_cpu_a.inc 和os_cpu_c.c。除此之外,移植工作还需要编写3 个CPU 相关文件,分别是cpu.h、cpu_a.a 和cpu_c.c。

os_cpu.h 中定义了任务切换宏定义,OS_TASK_SW()。对于MPC5646C 微控制器而言,任务切换是通过执行system call(sc, se_sc)指令,产生system call 中断(IVOR8),并在system call中断服务函数—IVOR8trap中执行OSCtxSw实现任务切换。

os_cpu_a.s 文件中包含了所有需要使用汇编语言实现的函数。开发者需要在该文件中实现4 个函数,即:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和OSTickISR()。OSStartHighRdy()会被OSStart()函数调用来开始多任务管理。该函数仅在操作系统启动时被执行一次。OSCtxSw()是任务级的任务切换函数,在IVOR8trap 中断服务函数中被调用来切换任务。OSIntCtxSw()是中断级任务切换函数。在所有嵌套的中断服务程序都退出后,OSIntExit()函数会调用OSIntCtxSw(),使得在中断函数执行后,当前最高优先级的任务能够运行。OSTickISR()是系统时钟节拍中断服务函数。MPC5646 的e200z4 内核中提供了时钟基准定时器—Time Base,该定时器中包含了一个减计数器,当减计数器的值由1变为0时,将引发Decrementer中断(IVOR10)。在Decrementer 中断服务函数—IVOR10trap 中,需要调用OSTickISR()。

os_cpu_a.inc 文件中实现了汇编文件的宏定义,包括两部分内容:第一部分是CPU 中通用寄存器的地址;第二部分是中断函数中要使用的prologue 和epilogue 功能。

os_cpu_c.c 文件中定义了10 个函数,需要自己实现的函数是OSTaskStkInit,用于初始化每个任务的任务堆栈。其余函数应保留函数定义,函数内容可为空,或保持其默认状态[9]。

2.2 CAN 通信程序设计

微控制器MPC5646C 一共支持6 路FlexCAN 模块。每个FlexCAN 模块有64 个消息缓冲(Message Buffer),每个Buffer 都可以独立配置为发送或接收功能。当Buffer 完成发送或接收动作后,中断标志位将被置位。如果相应的中断允许位被打开,MPC5646C 将产生中断,并进入相应的中断服务函数中。本文使用了“延迟中断处理”的概念,在CAN接收中断函数中读取Buffer 中的报文,通过队列发送给任务进行处理。如果当前队列已满,则清除中断标志位,不执行读取操作,退出中断函数。待下次进入中断函数时,读取所有接收的报文。CAN 中断函数流程如图4 所示。

图4 CAN 中断函数流程

本文对每一路CAN 都单独分配一个任务(task),任务创建时初始化每一个任务对应的CAN 模块。在任务主循环中读取队列,如果当前队列为空,当前任务则被操作系统挂起,出让CPU 使用权;当队列非空时,任务被操作系统唤醒,并读取队列中收到的报文,执行处理操作[10]。CAN 接收任务流程如图5 所示。

图5 CAN 接收任务流程

本文为每一路CAN 分配了一个互斥信号量,用于保护执行发送操作的Message Buffer 不会被重入[11]。当任务需要在某一路CAN 模块上发送报文时,首先申请该CAN 模块对应的互斥信号量,如果信号量被成功获取,则在所有的发送Message Buffer中寻找空闲的Message Buffer,找到后通过写寄存器实现发送操作;如果信号量没有被获取,则当前任务被挂起,任务的最长等待时间设置为5 ms,如果等待超时或没有找到可用的Message Buffer,则返回错误信息。CAN 发送函数流程如图6 所示。

图6 CAN 发送函数流程

2.3 以太网通信程序设计

MPC5646C 的快速以太网控制器(FEC)使用了描述符结构。描述符中包含了缓冲区首地址、数据长度、状态和控制信息等。发送和接收描述符分别在两个环形结构中运行。在FEC 中可以分别设置发送和接收描述符的起始地址。每个环形结构中的最后一个描述符由“Wrap”位进行定义。如果FEC 检测到该位被定义,则下一个描述符位于环形结构的开始位置,否则下一个描述符位于本次描述符的邻接位置。

当任务需要发送以太网数据时,首先获取一个空闲的发送数据描述符,在该描述符中填写数据长度和数据起始地址,如果待发送数据由多个缓冲区组成,则需要按照发送顺序依次填写与缓冲区个数相同的描述符。之后,按照数据发送相反的顺序,依次对发送数据描述符进行使能。最后,通知FEC 根据定义的描述符开始发送数据。以太网发送数据流程如图7 所示。

图7 以太网发送流程

由于本文使用了嵌入式操作系统μC/OS-Ⅲ,因此本文使用了一个专门的接收线程接收来自以太网控制器的数据。在以太网接收中断函数中,向接收线程发送信号量,并清除相应的中断标志位,而后中断服务函数立即返回。而接收线程一直判断是否收到该信号量,如果收到信号量,则从以太网控制器中读取接收到的数据,并发送给协议栈进行处理。以太网接收任务流程如图8 所示。

图8 以太网接收任务流程

3 测试验证

3.1 CAN 通信测试

为了验证所提系统性能, 使用USBCAN-4E-U 和USBCAN-2E-U 两种高性能USB 转CAN 接口卡对整个系统CAN 通信状态进行监控。使用USBCAN-4E-U 的CAN0 ~CAN3 分别连接网关的CAN0 ~CAN3,使 用USBCAN-2E-U 的CAN0 和CAN1 分别连接 网关的CAN4 和CAN5。网关控制器配置中继转发功能,CAN0 收到的数据转发CAN1,CAN1 收到的数据转发CAN0,CAN2 收到的数据转发CAN3,CAN3 收到的数据转发CAN2,CAN4 收到的数据转发CAN5,CAN5 收到的数据转发CAN4。当总线负载率为49.465 0%时,网关控制器转发功能工作正常,如图9 所示。

图9 网关控制器转发功能工作正常

3.2 以太网通信测试

使用JPERF 工具对以太网通信进行测试,结果如图10所示。通过图10 可以看到,传输速率稳定在88 Mb/s 左右。

图10 传输速率曲线图

4 结 语

本文提出一种基于μC/OS-Ⅲ的车载网关控制器设计方案。为提高网关的安全性,本文引入了嵌入式操作系统μC/OS-Ⅲ对网关控制器的任务进行调度,增强处理器对外部事件的处理能力。采用MPC5646 作为网关的核心处理器。对于车载网关控制器所要求的报文转发功能,在CAN 总线负载率为49.465 0%时,能够满足6 路CAN 同时工作并转发报文,以太网传输速率能够稳定在88 Mb/s 左右。

猜你喜欢

收发器描述符微控制器
清管球收发器设计细节分析及应用
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
Linux单线程并发服务器探索
物联网技术在微控制器实验教学中的应用
Virtex5 FPGA GTP_DUAL硬核两个收发器独立使用的实现
利用CNN的无人机遥感影像特征描述符学习
Atmel针对新一代物联网应用发布全新32位微控制器
最新STM32设计工具增加对混合信号微控制器的支持
意法半导体(ST)推出世界首款基于ARM Cortex-M7的STM32 F7系列微控制器