S32K144 UDS Bootloader软件:包含周立功ZCANPRO上位机操作简单,适合...
s32k144 uds bootloader软件包含上位机 上位机为周立功ZCANPRO脚本操作简单 非常适合学习调试。S32K144的UDS Bootloader开发挺有意思的特别是用周立功的ZCANPRO脚本做上位机比想象中省事儿。先给大伙看看我折腾出来的架构底层是S32K144的Flash驱动中间层实现UDS协议栈上层用ZCANPRO发诊断指令整个链路跑起来像德芙巧克力似的丝滑。Bootloader里有个关键函数得重点唠唠——处理UDS 0x34请求的代码片段void HandleRequestDownload(uint8_t* data) { uint32_t addr (data[2] 24) | (data[3] 16) | (data[4] 8) | data[5]; uint32_t size (data[6] 24) | (data[7] 16) | (data[8] 8) | data[9]; if(CheckFlashArea(addr, size)) { // 校验烧录地址合法性 currentAddr addr; remainingBytes size; SendPositiveResponse(0x74); // 发送肯定响应 } else { SendNegativeResponse(0x34, 0x31); // 参数越界 } }这段代码有几个骚操作地址校验时不仅要看是否在Flash范围内还得避开Bootloader保护区。用位运算拼装32位数据时注意MCU的大小端设置我这块板子用的是Big-endian模式。s32k144 uds bootloader软件包含上位机 上位机为周立功ZCANPRO脚本操作简单 非常适合学习调试。上位机用ZCANPRO脚本实现一键刷写脚本核心就二十来行def main(): can ZCAN() # 初始化CAN设备 can.uds_set(0x7E0, 0x7E8) # 设置诊断ID with open(app.bin,rb) as f: firmware f.read() can.uds_download(0x8000, firmware) # 指定烧录地址 can.uds_checksum() # 校验完整性 can.uds_reset() # 软复位这脚本最妙的是checksum校验自动计算二进制文件的CRC32值和MCU端计算的结果比对。遇到过坑——文件大于64KB时要分块传输得在脚本里加循环切片处理。调试时发现个反直觉的现象Flash擦除后立即写入会失败必须在擦除操作后插入10ms延时。后来查手册发现这是Flash控制器充电时间硬件限制没商量。代码里得这么改FLASH_DRV_EraseSector(flash_handle, sectorNumber, 0); OSTimeDelay(10); // 必须的等待 FLASH_DRV_Program(flash_handle, targetAddr, dataBuffer, bytesToProgram);上位机和下位机的协同有个心跳机制每500ms发个0x3E保持会话。有次突然掉线查了半天发现是CAN总线负载过高解决方法是在非传输时段降低心跳频率到2秒一次。实测这个方案最大支持512KB的固件升级从进入Bootloader到完成刷机约35秒。想进阶的话可以试试差分升级不过得在PC端集成bsdiff算法下回再跟大伙细聊这个。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2413891.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!