3.2 下位机程序设计
下位机接收上位机的命令,完成读写FLASH、E2PROM、镇定位、熔丝位和USB口使用权的切换等功能。由于实现的功能较多,采用了模块化、自下向上的结构化设计方法。首先按照ATMELCAl28L数据手册提供的SPI编程算法,用C语言实现了读写FLASH、锁定位和熔丝位等模块。
程序设计的一个难点是将接收的上位机发送的文件写入FLASH或E2PROM,因为涉及到接收数据和写FLASH或EZPROM的交互。解决方法是采用停止一等待传输协议进行数据传送。下位机开辟约定数量的缓冲区,利用中断接收上位机数据至缓冲区满,处理完缓冲区数据后发送确认标志,上位机收到确认后再开始下一次发送。
按制定的协议写ATMELGA128L的FIASH的流程图如图6所示。
写EZPROM与写FLASH类似,只是要将接收的地址、序列号、长度也写入E2PROM。代码在E2PROM中存放时仍保持表2所示的格式,即段初始地址、序列号、该段长度、数据的格式,以便将E2PROM中存储的代码写入FLASH。
编写下位机程序时,依据各模块分别用子函数实现、模块间接口清晰、主程序简单的原则,实现了读写FLASH和E2PROM、读写锁定位和锁定位、从 E2PROM写FLASH等几大模块,主函数接收到命令调用相应模块即可。当按下中断按钮时,中断程序先检测FLASH连接,如果检测成功,则调用从 E2PROM写FLASH模块;否则红灯闪烁指示操作失败。
使用本文设计的开发板对节点下载程序,程序运行正常,节点间通信状态良好,且功耗低,实现了预计的功能并满足性能要求。
从设计过程和使用可以看出,本开发系统具有以下优点:
(1)节点功耗低,体积小,射频芯片灵敏度高;
(2)节点通用性好,可以连接多种传感板;
(3)开发工具用户界面友好,支持多种目标文件格式;
(4)代码可存储在E2PROM中,需要下载时按下按钮便写入FLASH,配置节点方便。
本文所设计的传感器开发系统便于研究者做更深入的实践研究,推动了传感器更广泛的应用。