pte5

ads

内容提要

引言
1. S32K144的bootloader和应用程序存储器地址分配
2.  S32K144 CAN总线 bootloader和应用工程工程介绍
2.1 Processor Expert图形化配置生成S32K144-EVB的外设模块底层驱动
2.2 S32K144 CAN bootloader工程功能介绍
2.3 应用程序样例工程1介绍
2.4 应用程序样例工程2介绍
3. 上位机软件及CAN总线通信协议介绍
4. S32K144 CAN总线 bootloader的使用
4.1 基于S32K144-EVB的测试硬件连接
4.2 在S32K144-EVB上测试本例bootloader
总结

引言

S32K1xx系列MCU是NXP于2017年推出的基于32Arm® Cortex®-M4FCortex-M0+内核符合汽车电子AEC-Q100规范的通用汽车级微控制器。其具有强大的可扩展性 - 硬件和软件兼容的系列,提供多种性能、存储器和功能选项,并集成了ISO CAN FD、CSEc硬件安全、ASIL-B ISO26262功能安全和超低功耗性能,而且为用户提供免费的量产级软件开发套件(SDK)和S32 Design Studio IDE以及对AUTOSAR和MCAL的支持及强大的第三方生态合作体系,被市场广泛认可和使用。

随着汽车电气自动化和网联自动驾驶技术的日益普及,行业内主机厂(Car OEM)和汽车零部件供应商(Tier 1)对车内ECU(Electronic Control Unit,电控单元)提出了bootloader开发的急迫需求。

然而,汽车ECU bootloader的开发,要求开发者对ECU所用MCU的CPU内核、中断、存储器、通信外设、软件开发工具链、编程文件格式等都有全面深入的掌握,并非大多数工程师所能胜任。


尽管在我的微信公众号号(汽车电子expert成长之路)已经更新了若干相关知识的介绍文章(点击文章标题即可立即跳转阅读):

汽车电子ECU bootloader开发开发之S32K1xx系列MCU bootloader开发要点详解》;
浅谈嵌入式MCU软件开发之startup过程详解(从复位向量到main函数之前的准备工作)》;
浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解》;
CodeWarrior IDE使用Tips之利用prm链接文件实现储存器数据填充和代码编译结果CRC校验和自动生成详解》;


还是有很多读者还是留言反馈,在开发S32K1xx系列MCU的ECU bootloader中遇到了各种各样的问题。希望我能够像之前介绍S12(X)和MPC57xx系列MCU的ECU bootloader开发那样,以具体的一颗MCU为例进行深入详解,并提供验证可用的ECU bootloader demo工程分享给大家参考:

汽车电子ECU BootLoader开发之基于CAN总线通信的MPC574xP系列MCU bootloader开发详解》;

      《汽车电子ECU BootLoader开发之基于CAN总线通信的S12(X) 系列MCU独立NVM驱动安全bootloader》;

      《 浅谈嵌入式软件开发之Qorivva MPC57xx和S32R系列多核MCU启动配置与bootloader开发要点详解》;


为了更加实际的帮助大家,我花了2个晚上的时间,把之前在MPC5744P上实现的CAN bootloader移植到S32K144上,并基于S32k144 EVB-Q100x和武汉吉阳光电的GY8507 USB-CAN Adapter进行了验证。

在此,我将其中的若干细节分享给大家,希望对大家有所帮助和启发。

1. S32K144的bootloader和应用程序存储器地址分配

S32K144的存储器资源包括SRAM、FlexRAM、FlexNVM(可分区用作EEEPROM备份Flash或者D-Flash)和P-Flash。其中SRAM,FlexNVM和P-Flash提供了单比特纠错和多比特检错的ECC功能。

S32K144 MCU的存储器资源如下表:

S32K144的存储器资源

大小

是否有ECC功能

ECC类型

SRAM

60KB

32 + 7

FlexRAM

4KB

-

P-Flash

512KB

64 + 8

FlexNVM

64KB

64 + 8

相应地各种存储器的地址映射如下图:

S32K144的bootloader和应用程序存储器地址分配如下:

S32K144的存储器资源

大小

bootloader地址映射

应用工程地址映射

SRAM

60KB

全部使用

全部使用

FlexRAM

4KB

未使用

未使用

P-Flash

512KB

0x0000~0x7FFF(32KB)

0x8000~0x7FFFF(480KB)

FlexNVM

64KB

未使用

未使用

S32K144 bootloader 链接文件存储器分配:
/* Specify the memory areas */MEMORY{  /* allocate 32KB P-Flash for bootloader */  m_interrupts          (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000400  m_flash_config        (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000010  m_text                (RX)  : ORIGIN = 0x00000410, LENGTH = 0x00007BF0    /* reserve 512-32 = 480KB P-Flash for application*/  App_flash             (RX)  : ORIGIN = 0x00008000, LENGTH = 0x0007800
/* SRAM_L */ m_data (RW) : ORIGIN = 0x1FFF8000, LENGTH = 0x00004000 Boot_SRAM (RX) : ORIGIN = 0x1FFFC000, LENGTH = 0x00004000
/* SRAM_U */ m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00007000}
S32K144应用程序链接文件存储器分配:
/* Specify the memory areas */MEMORY{   /* Flash for APP*/  m_interrupts          (RX)  : ORIGIN = 0x00008000, LENGTH = 0x00000400  m_flash_config        (RX)  : ORIGIN = 0x00008400, LENGTH = 0x00000010  m_text                (RX)  : ORIGIN = 0x00008410, LENGTH = 0x00077BF0
/* SRAM_L */ m_data (RW) : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000
/* SRAM_U */ m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00007000}
为了方便调试,创建了一个与此bootloader相匹配的伪(pseudo)bootloader链接文件,将应用程序的中断向量表(m_interrupts)Flash配置(m_flash_config)放置到默认地址(0x0000~0x040F),以保证在没有bootloader(bootloader与应用程序同步开发,bootloader未ready时使用)时应用程序能够正常运行和放置芯片加密保护:

/* Specify the memory areas */MEMORY{  /*pesudo bootloader for directly debug app*/  m_interrupts          (RX)  : ORIGIN = 0x00000000, LENGTH = 0x00000400  m_flash_config        (RX)  : ORIGIN = 0x00000400, LENGTH = 0x00000010    /* Flash for APP*/  m_text                (RX)  : ORIGIN = 0x00008410, LENGTH = 0x00077BF0
/* SRAM_L */ m_data (RW) : ORIGIN = 0x1FFF8000, LENGTH = 0x00008000
/* SRAM_U */ m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x00007000}

    Tips:通过App1/2样例工程的AppDebug编译目标调用:

    相应的编译结果可使用对应的调试目标调用:

2.  S32K144 CAN总线 bootloader和应用工程工程介绍

为了快速开发和验证S32K144的CAN总线bootloader,本文提供的bootloader和应用程序样例工程,均使用S32K1xx SDK RTM3.0.0并使用S32DS for ARM v2018.R1 IDE集成的Processor Expert图形化配置生成S32K144-EVB的底层驱动程序。

2.1 Processor Expert图形化配置生成S32K144-EVB的外设模块底层驱动

根据S32K144-EVB的硬件设计,配置S32K144 CAN总线bootloader和应用程序样例工程中用到的外设模块底层驱动如下:

① RGB三色LED控制GPIO引脚配置

S32K144 EVB RGB LED

S32K144 GPIO pin

FTM(PWM)

BLUE

PTD0

FTM0_CH2/FTM2_CH0

RED

PTD15

FTM0_CH0

GREEN

PTD16

FTM0_CH1

pin_mux组件中配置PTD0, PTD15PTD16方向为输出,以控制S32K144 EVB板载RGB三色LED:


②两个用户按键输入上升沿中断配置

S32K144 EVB BUTTON

S32K144 GPIO pin

SW2

PTC12

SW3

PTC13

pin_mux组件中配置PTC12PTC13方向为输入

并配置其为CPU响应上升沿中断(ISF flag and interrupt on rising-edge),使能内部下拉:


③电位器模拟输入ADC通道配置

电位器

S32K144 ADC通道

0~5V输入

ADC0_SE12

添加adc_pal组件,将其配置为使用硬件ADC0PDB0, 12-bit分辨率,50 sample ticks:

并配置ADC转换序列使用LPIT channel 0(LpitCh0)硬件触发(HW trigger)外部输入通道12(ADC_INPUTCHAN_EXT12)的采样:


④LPUART串口通信的配置

在S32K144-EVB上,通过板载OpenSDA调试实现了一路虚拟串口,与S32K144的LPUART1相连:

S32K144 EVB UART

LPUART1

CAN bus Header(J13)

TX

PTC7

OpenSDA(Virtual Serial Port)

RX

PTC6

添加uart_pal组件,将其配置为使用硬件LPUART1,通信波特率为115200 bit/s,无奇偶校验位、1-bit停止位、每个字符8-bit,使用CPU中断收发:

并在pin_mux组件中,将LPUART1的RXTX引脚配置为分别使用PTC6PTC7


⑤FlexCAN0的配置


S32K144-EVB的CAN总线通信使用板载的UJA1169 SBC集成的CAN收发器,其默认是使能的,无需单独配置使能引脚或者使用SPI对其内部寄存器进行配置即可使用:

S32K144 EVB CAN

FlexCAN0

CAN bus Header(J13)

TX

PTE5

CAN_H(J13-1)

RX

PTE4

CAN_L(J13-2)

添加can_pal组件,将其配置为使用硬件FlexCAN0,选择8MHz外部晶振输入作为其波特率参考时钟源,配置通信波特率为500Kbit/s的CAN 2.0A/B协议:

并在pin_mux组件中,配置FlexCAN0RXTX引脚分别使用PTE4PTE5

⑥Flash驱动配置


添加Flash组件,其为bootloader提供了Flash驱动API:


⑦看门狗配置


添加WDOG看门组件,选择8MHZ的SIRC作为其参考时钟源,并将timeout周期设置为320ms


2.2 S32K144 CAN bootloader工程功能介绍


作为S32K144 CAN bootloader的功能实现,该工程使用了S32K1xx SDK的can_pal组件和flash组件来完成bootloader与上位机之间的CAN总线通信和提供应用程序更新的Flash驱动代码:


bootloader具体程序实现如下:


每次MCU复位 (包括上电复位、看门狗复位、外部输入复位、低电压检测复位、时钟检测复位和非法地址) 之后,进行系统初始化,配置系统时钟、打开定时器、配置FlexCAN和用于状态指示的LED控制GPIO,打开CPU全局中断,然后等待上位机boot命令并检查是否超时:


如果在规定的500ms内接收到了上位机请求进入boot的命令,则接收数据并解析得到行地址和字对齐 (1word=2Byte) 的数据,接着判断S19行地址空间,

若是Flash地址且是第一次收到Flash数据,则将除bootloader程序之外的所有片上Flash擦除为编程应用程序做准备;对Flash地址的数据,在编程到Flash中之前,还必须将以上解析结果的地址和数据进行4字(8字节)对齐,以满足MPC57xx系列MCU C55 Flash对ECC的要求;


若是RAM地址,则无需擦除,直接将介绍到的数据写到指定RAM地址;


然后与上位机建立通信,逐行接收,解析并将结果烧写到相应地址的片上Flash/EEPROM/RAM中,直至整个应用程序S19文件结束,最后复位外设(关闭MSCAN)、清除NVM驱动所在的RAM空间、关闭CPU全局中断,禁止所有外设中断,结束bootloader跳转至应用复位函数开始执行应用程序;

如果在规定的500ms内未收到上位机通过CAN发来的进入boot命令,则直接关闭CPU全局中断,禁止所有外部中断,结束bootloader跳转至应用复位函数开始执行应用程序。


整个bootloader工程的软件流程图如下:


2.3 应用程序样例工程1介绍

为了验证S32K144 CAN总线bootloader,创建了两个应用程序样例工程,其中样例工程1,在配置PLL产生80MHz内核工作频率的前提下,实现了对S32K144板载RGB LED和用户按键输入的综合测试功能(LPIT 1秒定时中断翻转绿色RGB LED, SW2按下后在其中断ISR中开启蓝色 RGB LED,SW3按下后则在其中断ISR中关闭蓝色 RGB LED),实现了CAN总线通信以响应bootloader上位机的应用程序升级请求,当接收到boot ID的CAN报文后,程序将进入死循环,等待看门狗timeout复位,从而进入bootloader模式:


2.4 应用程序样例工程2介绍


为了验证S32K144 CAN总线bootloader,创建了两个应用程序样例工程,其中样例工程2,配置PLL产生80MHz内核工作频率,在样例工程1功能实现的基础上,还增加了LPUART的串口通信打印输出ADC采样结果(通过PIT 通道0硬件触发完成对板载电位器输入电压的采样),并据此控制PWM信号输出的占空比,从而实现对板载蓝色 RGB LED亮度的连续控制:


3. 上位机软件及CAN总线通信协议介绍


运行在PC上的上位机软件主要功能是读取目标MCU的应用程序S19文件,并调用USBCAN总线适配器 (Adapter) ,将其逐行下载到目标MCU,其软件设计软件设计流程图如下:

本设计中,采用Visual C++调用WFC和武汉吉阳光电的GY8507 USBCAN适配器驱动,编写上位机界面软件。


PC上位机下载应用程序S19文件的CAN消息是ID0x64的标准数据帧,而bootloader host程序应答上位机的CAN消息帧是ID0xC8的标准数据帧,通信速率设置为500Kbit/s。因此在S32K144初始化时将FlexCAN模块的接收ID滤波器设置为只接收ID0x64的标准帧,以避免正常网络上其他ECU的干扰。具体在整车上实现时通信速率由当前ECU所在的CAN网络决定,其通信的消息ID由整车厂定义。具体的CAN消息命令定义如下:


4. S32K144 CAN总线 bootloader的使用


4.1 基于S32K144-EVB的测试硬件连接


本例基于S32K144-EVB和吉阳光电的GY8507 USB-CAN Adapter开发和测试,相应的硬件连接如下图所示:

4.2 在S32K144-EVB上测试本例bootloader


按照上图连接好电脑和硬件之后,下载本文文末提供的百度云盘分享,将S32K144_CAN_Bootloader_and_SampleApp_Projects.zip包含的bootloader和测试应用工程导入到S32DS for ARM V2018.R1 IDE中(通过菜单File-->Import..-->General-->Existing projects inti workspace):

Tips:样例工程编译生成的S19文件,需要使用第三方软件(比如Hew-View)实现8字节对齐以保证下载过程中bootloader对S32K144 Flash的编程符合其最小64bit + 8bit的ECC checkbit要求,且需要将文件后缀名改为.S19才能被本文提供的bootloader上位机软件识别

并通过S32K144-EVB板载的OpenSAD调试器将MPC5744P_CAN_Bootloader工程下载到S32K144-EVB中;


然后,打开基于吉阳光电的GY8507 USB-CAN Adapter开发的上位机软件下载测试应用工程S19文件:

Step1:下拉选择通信波特率--500Kbps
Step2:点击“Open driver”打开GY8507 USB-CAN Adapter;
Step3:点击“Send File...”选择已经8字节对齐的测试应用样例工程--S32K144EVB_App1/2的 编译结果(位于Debug目录下)S19文件--S32K144EVB_App1/2_LED_ButtonIRQ_PIT_CAN_80MHz_SDK_RTM3P0_8ByteAligned.s19,开始发送/下载;

最后,复位(按下外部复位按键SW3或者重新上电POR复位)S32K144-EVB,则会开始更新测试应用程序:


总结


本文介绍的S32K144 CAN总线bootloader是在之前MPC5744P bootloader的基础上移植的,经实测验证,能够稳定工作,实现完整的bootloader功能,但是依然存在以下不足:

① 上位机使用S19源文件传输,效率不高;
② 要求应用程序编译结果S19文件按照8字节对齐;
③ 不支持最新的CAN-FD通信协议;
④ Flash驱动程序驻留在P-Flash中,未实现NVM独立下载并在RAM中运行的安全bootloader;
⑤支持的USB-CAN adapter设备单一;

在后期,我将考虑对以上不足进行逐一改进,进一步完善S32K144的bootloader功能。

为了方便大家参考学习,我将本文介绍的S32K144 CAN总线bootloader和相应的应用程序样例工程以及上位机软件一起分享到如下百度云盘:

链接: https://pan.baidu.com/s/109YKzfSwh-HrrcNavqCT4w
提取码: xpai

Tips:其中,mfco42d.dllmsvcrtd.dll是在Win10系统中使用GY8507 USB-CAN Adapter驱动所需的两个动态链接库。具体使用方法,请参考ReadMe.txt



阅读更多精彩内容,请访问以下文章目录列表(点击文章标题直接跳转阅读):


历史文章分类列表目录(点击文章标题即可直接跳转阅读,截止2019年10月15日);



原创写作不易, 如果大家觉得本文对你的工作和学习有帮助,也欢迎大家赞赏鼓励----我将坚持写作,给大家带来更多精彩的原创文章。


Tips点击文末的“喜欢作者”对本文进行赞赏或者“在看/好看”进行分享,也可以留言提问,我将第一时间回复大家的关切!


欢迎在此与我一起学习/探讨汽车电子和嵌入式系统软硬件设计相关的技术。若对本公众号或者分享的文章观点有任何意见和建议也欢迎留言指出。您的点赞/关注/转发分享是对我辛勤写作的最大支持和肯定!


本公众号已开通关键词回复功能,请在公众号主页回复如下关键词以获取更多信息和精彩文章:


  • 关于作者,请回复关键词“作者简介”;

  • 联系作者,请回复关键词“联系作者”;

  • 获取高清PDF版本公众号文章,请回复关键词“获取文章”;

  • 获取专业及时的技术支持服务,请回复关键词“专业服务”;

  • 下载2017~2018年度原创技术文章集合高清PDF,请回复关键词“文章全集”;

  • CodeWarrior IDE license购买及安装使用问题咨询,请回复关键词“CW License”;

  • 汽车以太网转工业以太网转换器购买,请回复关键词“以太网转换器购买”;

  • 获取最新最全的公众号原创技术分享文章目录,请回复关键词“文章目录”;

 郑重声明:本公众号所有原创技术文章免费阅读,文中所有观点/结论均为个人观点,不代表任何公司官方观点意见;所有demo代码/程序,仅作参考学习,不保证质量,若用于商业用途,责任自负;所有本公众号文章,版权归本人所有知识产权,一切未经本人同意的转载均属违法,盗版必究~!


如果你喜欢本公众号的文章,请点击文章最开始的公众号关注或微信直接长按扫描识别下方关注,你也可以在微信添加朋友-->公众号-->输入"汽车电子expert成长之路"搜索-->点击关注。若对本文观点有任何意见和建议也欢迎留言指出。


您的关注、点赞、转发分享是对我辛勤写作的最大肯定!


Enwei Hu(胡恩伟)

2019年11月12日于山城·重庆.


本文由拔丝英语网 - buzzrecipe.com(精选英语文章+课程)收藏,供学习使用,分享转发是更大的支持!由 汽车电子expert成长之路原创,版权归原作者所有。

最后编辑于:2023/6/1 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com