本帖最后由 znmcu 于 2014-1-30 02:05 编辑
在振南的ZN-X开发板上配备了NRF24L01射频收发模块的接口,兼容公版模块。znFAT文件系统与射频能有什么关系呢?它们搭配在一起又能实现什么功能呢?应该说它的意义还是比较大的,可以实现文件数据的无线传输功能。这为文件系统的应用创造了新的思路。 你有没有过这样的经历。当你进入飞机场时,会通过蓝牙或网络接收到一些信息文件,诸如通知或新闻等。再比如有的时候我们需要为野外工作的设备升级固件,但又很难接近设备,也许你会希望有一种脱机烧录器,可以读取SD卡上的程序文件,通过无线方式完成烧录工作。有人基于射频的无线通信技术之后,很多东西都可以驭之于数里之外了。 NRF24L01 是非常经典的2.4GHz射频通信芯片,它以高可靠性、高数据传输速率等优点得到人们的广泛应用。此实验中使用NRF24L01,51与STM32(两块ZN-X开发板),再配以SD卡与振南的znFAT文件系统方案,最终完成文件的无线传输与存储。实验示意如下图。
实验中51单片机读取SD卡中的某一文件,将其数据按一定的通信协议分多帧以无线方式传至STM32,STM32接收数据解析后将有效数据写入到SD卡的文件中。在这个过程中,SD卡、NRF24L01等硬件的底层驱动以及znFAT文件系统其实都不是问题,它们在振南的眼里已经比较成熟了。最重要的其实是通信协议,它是使得数据传输有条不紊进行的核心。 振南这里使用的是一种自定义的文件传输协议,它简单易行,又能基本上保证数据的正确性。协议具体内容如下图所示。
在代码里,首先检测数据头是否为’@’,如果是则认为它是一个合法的数据包,进而开始对后面的数据进行解析,否则认为它是一个非法数据包,输出错误提示。由于NRF24L01一次最多只能收发32字节的数据,所以本协议中数据包总长度为32字节。每次传输的最大数据长度为28字节,其余4个字节,分别用于数据头、有效数据长度与当前数据包的包号(0~N)。有效数据长度用来告诉我们从此包数据中提取多少有效数据,写入到SD卡中;数据包号可用于侦查是否有数据包丢失,进而采取相应的措施(比如重传,不过此实验中没有实现重传机制,如果出现包现象,则直接补0)。 实验相关图片效果 :
在线演示视频:http://v.youku.com/v_show/id_XNjY3NjM5ODIw.html
源代码:
51.rar
(385.61 KB)
STM32.rar
(366.29 KB)
|