1.5 运行流程
1)主芯片上电后,执行RESET指令,该指令对应的Flash地址是0x3FFFC0,执行启动系统程序,完成底层寄存器及堆栈等的环境配置。
2)执行引导加载程序的main函数,对必要模块(如时钟模块、CAN模块、Flash模块等)初始化,在主循环里设置等待时间为5s,如果5s内收到来自上位机的升级指令,则进入用户升级程序;如果未收到来自上位机的升级指令,则跳出升级程序,执行原应用程序。
3)控制器收到来自上位机的升级指令执行用户升级程序后,擦除旧的应用程序,等待上位机发送新应用程序的HEX文件。
4)上位机以行为单位发送HEX文件数据,控制器接收数据并保存到自定义的数组中,同时向上位机应答。
5)控制器接收完1行数据后,对自定义数组中整行的数据,按照HEX的格式,解析出该行的数据长度、数据地址、数据内容及校验码,并写入到对应的Flash地址。
6)重复上一步,直至整个HEX文件数据写入对应的Flash地址中。
7)跳转至新用户程序的开始地址执行程序。
2.应用程序存储
由于FlashA和FlashB已划分给引导程序,应用程序只能占用扇区FlashC~FlashAB,文中应用程序主要占用扇区FlashC~FlashJ。
3.上位机软件
通过调用CAN卡,上位机实现与控制器之间的信息交互,结合汉明码校验和纠错功能实现上位机与电机控制器的数据传输。上位机主要包括操作界面设计、通信协议制定。
3.1 操作界面设计
PyQt是Python和Qt的结合,能够高效地编写各类图形用户界面应用程序,利用PyQt的设计工具QtDesigner搭建图形化操作界面,操作界面主要包含CAN卡配置操作、升级过程操作和窗口显示。CAN卡配置操作可实现波特率的选择功能,CAN卡打开、关闭及复位功能;升级过程操作包括准备升级操作、加载文件操作和开始升级操作;窗口显示分为2部分,一个用于显示运行状态,另一个用于显示HEX文件传输数据流。