工作描述:
负责项目中嵌入式软件的开发工作,最主要的工作是基于stm32芯片的开发。
具体工作为:
1、底层驱动架构设计、编码及测试;
2、调度系统编码及测试;
3、软件顶层架构设计;
4、软件应用层编码及测试;
5、撰写技术文档及中间过程文档;
6、制定与各个分系统及各模块之间的通信协议(接口包括uart、spi、fsmc、selectMap、qspi等……);
7、配合FPGA开发人员编写部分verilog代码用于测试及验证;
8、配合DSP开发人员编写部分C代码用于测试及验证;
9、根据项目数据分析需要编写matlab代码,用于数据可视化分析;
10、配合硬件工程师绘制简单验证用电路板(原理图+PCB)使用Altium designer。
工作期间完成成果:
1、共绘制3块印制电路板(原理图加PCB) :
(1)双层板、焊点80左右、尺寸2cmX4cm,一次投板成型,用于flash存储模块验证;
(2)六层板、焊点1900左右、尺寸150cmX150cm,用于arm芯片(stm32h743)外设验证,修改过一次PCB图纸、投板两次成型;
(3)四层板、焊点2300左右、尺寸560cmX270cm,用于地检测试设备,一次投板成型;
2、编写基于stm32h743的驱动程序:
(1)在编写快速配置FPGA程序驱动的过程中,发现st公司关于h7芯片gpio芯片翻转速度限制的问题,经过与st技术人员沟通从芯片框图中找出快速gpio翻转的方法(BDMA+TIM触发),并加以验证,提高了100%的FPGA程序配置速度。
(2)在编写串口驱动过程中独创了一种通用性较高并加以运用DMA的解帧方式,解帧可靠、代码可读性及可移植性较高。在实际测试中,同时6个串口以极限速度(2个115200bps、1个460800bps、3个230400bps)发送数据帧共计5天5夜,零解帧错误。
(3)独立编写qspi接口flash芯片驱动程序、并解决了驱动程序中初始化四线模式切换的问题。
(4)编写spi接口ad配置程序及lmk04828时钟芯片配置程序。
(5)编写与FPGA通信所使用的FSMC接口驱动程序。
3、编写基于stm32h743的调度系统程序:
(1)由于项目的特殊性、复杂性、不允许使用现成的操作系统(如ucos、ecos、freertos等),故独创了一套基于事件驱动的优先级任务调度系统,整个操作系统代码行数1500行,包括任务优先级队列、事件驱动队列、信号量、任务内延时、任务内等待事件等功能。该调度系统正应用于该项目中,经测试、在64个任务下(接近32个逻辑任务、32个辅助测试任务)一直稳定运行未出现故障。
4、基于stm32h743的软件顶层架构设计;
(1)搭建了一整套软件的顶层架构、运用单例模式将代码设计成面向对象的方式、大大提高代码的可维护性及可读性。又将各层解耦、提高了代码的可移植性。项目进行过程中多次变更需求,然而在该架构下从未重构过代码,依然可以清晰地对代码进行管理。
5、其他配合性工作
(1)配合FPGA开发人员分析了uart部分的解帧代码,发现了异步组合逻辑控制同步时序的隐患。
(2)配合DSP人员开发了部分协议的c语言解帧模块。
(3)制定了4套uart协议、1套spi协议、及2套fsmc接口寄存器定义表格。其中fsmc接口寄存器表格配合上位机开发人员开发了一款代码自动生成软件,可将FPGA代码及c代码自动生成、确保寄存器表格的正确性及一致性。
(4)为分析AD掉链问题,将stm32上的遥测信息输出并编写matlab程序,分析出AD掉链与温度强相关的结论,后续也得到证实确实为FPGA端JESD204B接口配置时序问题,该问题与温度强相关。