hacking S32K144
简介
S32K144是NXP推出的车规级别的MCU,ARM架构的内核。芯片在设计上考虑了功能安全的设计,可以达到ASIL B的级别。 这方面我没有太多的ARM平台的经验,恰好借助这个平台了解一下。 虽说按照一般的认知,SDK比自己手写驱动要简单。但是关于SDK的使用,我也没有太多经验。这次hack过程中研究一下这里面的技巧。 除了驱动之外,尽量在这个平台上熟悉一下FreeRTOS的平台开发。
维护者联系方式
- Email: [email protected]
TDL
- 1. MCU资料收集(DONE)
- 2. 开发板资料收集(DONE)
- 3. 开发工具选择(DONE)
- 4. 工程创建以及开发环境配置(DONE)
- 5. 软件调试方式(DONE)
- 6. 周期性定时器(DONE)
- 7. GPIO(DONE)
- 8. 时钟配置(DONE)
- 9. 串口(DONE)
- 10. CAN(DONE)
- 11. ADC(DONE)
- 12. SPI(DONE)
- 13. IIC
- 14. RTOS
- 15. BootLoader
- 16. DMA(DONE)
- 17. 中断(DONE)
- 18. 加密
- 19. QuadSPI
- 20. 数学以及电机库文件的使用
- 21. CRC(DONE)
实践路线
MCU资料收集
- S32Kxxx MCU产品模块图
- Data Sheet
- 用户参考手册
- S32K系列情况说明书(这个其实包含了产品模块图的信息)
- 相关资料: S32K144_001_docs
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104239649
开发板资料收集
- 首先需要说明的是我购买的开发板就是官方的开发板版本,从标签看,版本是Rev C。
- 原理图
- 快速入门说明
- 相关资料: S32K144_002_EVB
- 总结分析参考链接: https://blog.csdn.net/grey_csdn/article/details/104241437
开发工具选择
- 编译器套件:选择NXP官方的S32DS for ARM。这是一个基于gcc的免费的开发套件,作为我们的学习选择还是不错的。
- 调试器:看到了开发板上自带了一个OpenSDA,这算是其中的一个选择。另外,我也准备了一个Jlink。
开发工具S32DS for ARM初步了解
S32DS快速上手文档分析
S32DS for ARM的共性特征学习
使用S32DS for ARM创建S32K144工程并编译
- 相关代码参考: S32K144_003_new_project
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104320363
开发板供电、软件烧写以及调试
使用S32DS通过例子创建相应工程
使用S32DS创建基于SDK的工程
S32DS SDK的使用
S32DS导入已经存在的工程
S32DS解决编译找不到已经添加的文件和目录问题
使用S32DS结合SDK,创建FreeRTOS的工程
- 参考代码: S32K144_004_create_freeRTOS_project
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104347849
基于FreeRTOS的串口打印例子测试与分析
在S32DS中修改工程名称
- 软件工程参考: S32K144_005_rename_project
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104384152
时钟配置
- 核心代码参考: S32K144_006
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104420403
S32DS中实时查看变量的变化
S32K144实现串口驱动
- 参考代码: S32K1144_007
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104420809
串口的波特率配置测试
使用DMA的UART
GPIO控制LED闪烁
- 代码参考: S32K144_009_GPIO_LED
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104444332
周期性定时器 LPIT
- 参考代码: S32K144_010_PIT
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104449049
FreeRTOS的队列
- 参考代码: S32K144_011_FreeRTOS_Queue
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104450056
printf via UART
- 参考代码: S32K144_012_printf
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104450862
FreeMaster的使用
FreeMaster的移植
- 参考代码: S32K144_013_FreeMaster
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104485061
FreeMaster的功能的快速开启与关闭设计
Debug on FreeRTOS stack
软件触发模式的ADC
RTC时钟初步
-参考代码: S32K144_014_RTC
RTC时钟时间设定
- 参考代码: S32K144_015_RTC
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104565814
FreeRTOS的精准周期性任务调度
- 参考代码: S32K144_016_Periodic_Task
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104574942
串口接收功能
- 参考代码: S32K144_016_UART_RX
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104578701
基于DMA的串口收发
- 参考代码: S32K144_017_UART_DMA
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104579262
串口的阻塞式收发
- 参考代码: S32K144_018_UART_Blocking
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104579539
查询模式下的串口接收
- 参考代码: S32K144_019_UART_Polling
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104580702
基于FreeRTOS的串口接收功能改进
FreeRTOS Tick Hook
- 参考代码: S32K144_020_FreeRTOS_Tick_Hook
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104595515
获取FreeRTOS任务的优先级
- 参考代码: S32K144_021_FreeRTOS_Task_Priority
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104597164
FreeRTOS 守护程序启动监控
- 参考代码: S32K144_022_FreeRTOS_DaemonTask
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104597473
FreeRTOS heap剩余空间获取
- 参考代码: S32K144_023_FreeRTOS_FreeHeap
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104599396
看门狗
- 参考代码: S32K144_024_WatchDog
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104643882
lptmr定时器使用
- 参考代码: S32K144_025_lptmr
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104686728
模式切换
- 参考代码: S32K144_026_PowerMode
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104723732
提升FreeRTOS的工作时钟
- 参考代码: S32K144_027_FreeRTOS_Clock
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104728213
GPS报文解析实现
S32K144 EVB CAN基本配置实现以及测试
- 参考代码: S32K144_028_CAN_Transmit
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/104868882
CAN 接收功能初步
- 参考代码: S32K144_029_CAN_Receive_Basic
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105181759
CAN获取默认配置
- 参考代码: S32K144_030_CAN_Default_Config
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105186747
CAN波特率修改
- 参考代码: S32K144_031_CAN_Baud_Rate
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105212017
CAN FIFO初步
- 参考代码: S32K144_032_CAN_FIFO_Basic
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105233841
CAN FIFO接收全部的CAN ID
- 参考代码: S32K144_033_CAN_FIFO_all_msg
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105280370
CAN的回调函数
- 参考代码: S32K144_034_CAN_CallBack_Function
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105303727
CAN的DMA收发模式
printf via CAN
- 代码参考: S32K144_035_printf_via_CAN
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105311915
CAN故障诊断
- 代码参考: S32K144_036_CAN_error_process
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105325933
CAN错误种类获取
- 参考代码: S32K144_037_CAN_error_type
- 总结分析的小结参考链接: https://blog.csdn.net/grey_csdn/article/details/105329398
UDS初步
CRC模块的使用
- 总结分析的小结参考链接: S32K144 CRC模块的使用
- 代码参考: S32K144_038_CRC