APP下载

基于nRF24L01的嵌入式无线下载系统设计*

2021-03-18

机械工程与自动化 2021年1期
关键词:寄存器频道应用程序

陈 聪

(江苏航空职业技术学院,江苏 镇江 212132)

0 引言

本文主要研究利用无线数据传输技术进行嵌入式应用程序下载更新。系统的设计立足于企业实际生产测试需求,与企业生产的产品测试对接的硬件测试设备无需人工进行嵌入式程序下载更新,直接利用无线通信技术将最新设计的测试程序传输给相应的测试设备。该技术不仅可以大大节约人力、缩短测试时间,同时还可以应用于一些特殊生产测试车间,例如无尘车间及对静电放电敏感产品的测试车间等。本设计采用的无线通信模块为工作在2.4 GHz的无线收发模块nRF24L01,该模块采用欧洲顶尖RF公司设计的无线芯片,除具有成本低、体积小、产品稳定等特点外,还具有最大10 dBm的发射功率、7 mA的接收电流以及-115 dBm的接收灵敏度,经测试最大距离可达500 m,远超同类型的2.4 GHz无线模块。

1 下载系统总体设计

系统的总体设计思路是设计一块以STM32为主芯片的主机(程序下载板),先利用电脑端生成需更新程序的bin文件,接着电脑端通过UART串口将bin文件发送至主机的STM32 Flash中存储;更新从机(客户板)程序时,主机从Flash中读取bin文件,并利用2.4 GHz无线通信模块nRF24L01将数据发送到从机STM32 Flash中实现程序更新。图1为下载系统结构框图。

图1 下载系统结构框图

2 系统关键部分设计

2.1 STM32 Flash操作设计

上位机将从机需更新的应用程序的bin格式文件通过UART串口通信方式发送给主机,主机将收到的数据写入自己的微处理器STM32的Flash中。因需要利用主机的STM32的Flash作为更新程序的中转站,因此,选用STM32F103RET6作为主芯片。该芯片属于大容量芯片,Flash容量为512 kB。大容量产品的Flash模块组织结构如表1所示。

表1 STM32大容量Flash模块组织结构

STM32F1的Flash由主存储器、信息块和闪存存储器接口寄存器3部分组成。主存储器用来存放代码和数据常数。大容量产品的主存储器被划分为256页,每页2 kB。主存储器的起始地址是0x08000000,BOOT0、BOOT1都接地的时候,就是从0x08000000开始运行代码。信息块分为2小部分:启动程序代码,用来存储ST自带的启动程序,存放串口下载代码;用户选择字节,则一般用于配置写保护、读保护等功能。闪存存储器接口寄存器用于控制闪存读写等,是整个闪存模块的控制机构。

ST固件库对Flash操作主要提供了以下几类函数:①Flash上锁、解锁函数;②Flash写操作函数(包括16位、32位和用户选择写入),Flash读取可以直接通过地址访问,因此没有对应的函数;③Flash擦除函数;④获取Flash状态函数,该函数返回值主要包括忙、编程错误、写保护错误、操作完成和操作超时;⑤等待操作完成函数,在进行闪存写或擦除操作时,不能进行代码或数据的读取操作,所以在每次操作之前,都要等待上一次操作完成。

对Flash的操作大致需要4个流程:①确定要写入Flash的首地址;②解锁Flash;③对Flash进行操作;④对Flash重新上锁。

2.2 nRF24L01一对多无线通信设计

nRF24L01无线收发模块是一种远距离、低功耗、高灵敏度的FSK无线数字通信模块。该模块具有126个通信通道、6个数据通道,满足多点通信和调频需要。nRF24L01采用4线SPI通信端口,通信速率最高可达8 Mb/s,适合与各种微处理器连接。

nRF24L01可以实现多机通信,一个芯片最多可以设置六个接收地址,能轻松实现六发一收功能。而本设计中主机需要同时更新生产线上的多个从机程序,需要使用到一发多收的功能。因此,nRF24L01组网方式采用简单可靠的轮询方式。轮询方式是典型的一主多从的组网方式,所有从机都不会主动发送信息,平时一直处于接收状态。只有主机发送给某个从机询问指令的时候,该从机才会立刻回复一条信息,之后立刻再置为接收状态。这样就避免了多个模块随意发产生的频繁碰撞问题,使得每次通信都安全可靠。

2个nRF24L01之间通信一般需要设置4个条件相同:发射接收数据宽度、发射接收地址、发射接收频道、发射接收速率。在轮询工作方式下,可以通过配置主机的发射地址或发射频道来实现主机与多个不同从机的通信。nRF24L01的发射接收地址是8位地址,频道是0~125共126个频道,理论上可以实现1个主机与无数个从机之间的通信。实际上通信地址或通信频道设置过近会互相干扰,本设计主要模拟了1主5从之间的通信,通过配置不同的从机通信频道来实现。从机1设置的频道是10,从机2的频道是30,从机3的频道是50,从机4的频道是70,从机5的频道是90,频道之间拉开距离。可以通过RF_CH寄存器配置主从机之间的通信频道,nRF24L01常用寄存器及其功能如表2所示。

表2 nRF24L01常用寄存器及其功能

nRF24L01发射端初始化过程如下:①设置发射节点的地址TX_ADDR;②设置接收节点的地址RX_ADDR_P0,为自动应答准备;③使能自动应答AUTO ACK EN_AA;④使能通道0接收地址PIPE 0 EN_RXADDR;⑤配置自动重发次数SETUP_RETR;⑥选择通信频道RF_CH,本设计中通过更改寄存器RF_CH数值实现多机通信;⑦配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP;⑧选择通道0有效数据宽度Rx_Pw_P0;⑨通过CONFIG寄存器配置24L01的基本参数以及切换工作模式。

nRF24L01接收端初始化过程如下:①设置接收节点的地址RX_ADDR_P0;②使能自动应答AUTO ACK EN_AA;③使能通道0接收地址PIPE 0 EN_RXADDR;④为从机选择通信频道RF_CH;⑤选择通道0有效数据宽度Rx_Pw_P0;⑥配置发射参数(低噪放大器增益、发射功率、无线速率)RF_SETUP;⑦通过CONFIG寄存器配置24L01的基本参数以及切换工作模式。

3 主机软件设计

主机的应用程序主要有两大逻辑:一是判断是否收到上位机通过串口发送过来的从机需要更新的应用程序数据,如果收到就按页将数据写入Flash中;二是如果生产线上的从机需更新应用程序,则按下程序更新按键,开始读取Flash中的数据并通过nRF24L01无线通信发送过去。其余时间,主机处于等待状态。判断是否收到上位机数据采用查询方式,按键程序采用中断方式。主机主程序流程如图2所示。

图2 主机主程序流程

本设计中将主机的Flash主存储器划分为两块区域,一块用于存放正常程序,另一块用于存放从机待更新的应用程序数据。一般不复杂程序的bin文件大约占用几十k字节,因此,主机中存放正常程序的部分划分128 kB区域,从地址0x8020000开始存放从机需更新的程序数据。主机收到电脑通过串口发送的bin文件数据后,开始从Flash第64页按页写入数据,当全部数据写入完成后锁定Flash。主机Flash写入流程如图3所示。

图3 主机Flash写入流程

当主机上的下载按键按下后,开始从主机的Flash中读取数据,并通过nRF24L01无线模块发送出去。下载按键按下后,首先配置主机作为发射端的寄存器数据,先配置主机与1号从机的通信频道匹配,并建立连接,接着根据从上位机接收到的bin文件大小依次从主机Flash中读取数据并发送给1号从机;1号从机接收完毕后,延时等待1 s,开始将主机的通信频道设置为2号从机的频道,主从建立连接后开始发送数据。依次更新从机数据,直到所有从机完成更新后返回主程序。主机Flash数据发送流程如图4所示。

图4 主机Flash数据发送流程

4 从机软件设计

从机未收到更新程序时,执行原程序;收到nRF24L01发来的数据后,将数据写入从机的Flash中并执行更新程序。因此,从机采用启动程序加应用程序的设计。启动程序有两个主要目的,一是跳转到应用程序并执行,二是更新从机应用程序。从机的Flash划分和主机一样,64页前放置启动程序,从64页开始放置应用程序。在从机第一次程序烧录时,为从机编写两个工程文件:一个是启动程序工程,该工程在配置时ROM起始地址设为0x8000000,大小设为0xFFFF(128 kB);另一个是应用程序工程,该工程在配置时ROM地址设为0x8020000,大小设为0xFFFF(128 kB)。要在启动程序中实现程序跳转需要设置中断向量表地址为0x8020000,同时将函数指针p指向应用程序的复位函数地址。每次需要更新从机程序时,先给从机断电再重新上电,重新上电后程序自动跳转到启动程序执行,等待接收主机发来的数据。从机的启动程序流程如图5所示。

图5 从机启动程序流程

5 结语

本文设计的无线下载系统可以面向各类电子通讯设备的测试企业,通过该系统可以优化电子通讯产品的测试流程。在一项测试程序结束之后不用人工进行每台测试设备的程序更新,直接利用主机完成系列生产线上的测试设备程序更新,从而大大节约了人力和测试时间,该方法还可以进一步应用到特殊场合的生产及测试车间。

猜你喜欢

寄存器频道应用程序
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
4K频道开播,你准备好了吗
寒假快乐频道
频道
高速数模转换器AD9779/AD9788的应用
一种可重构线性反馈移位寄存器设计
专家频道