本帖最后由 znmcu 于 2012-8-20 11:25 编辑
请关注 振南的znFAT 单片机上的FAT32文件系统
QQ 987582714
===================================
源代码下载:
xmodem.zip
(362.76 KB)
znFAT应用手册:
znFAT移植与使用手册.pdf
(285.28 KB)
XMODEM文件传输协议文档资料:
用 UART 做文件传输(采用 Xmodem协议).pdf
(921.16 KB)
================================================
“串口文件传输”这一实验起初其实是源于一个不良的思想----“盗取文件”。一次和朋友的聊天中,聊到了“如何从一台涉密计算机中盗取文件?”的问题。要知道在一些机要单位,办公电脑是绝对封锁的,不管是从软件上,还是硬件上。可能USB口或网口直接被堵上或拆掉了,机箱也加上了锁,阻断了一切文件被非法拷出的途径。如何从这样一台守卫森严的电脑中把文件搞出来,是个挑战!其实这一“盗取文件”的行为并不一定就是不良行为,有时候为了维权,也许我们也需要一些特殊手段,比如从封锁的电脑中搞到一些证据等。
经过思考,我们最终敲定了一个方案----“串口文件传输”。这一方案大致可以分为以下几个部分:
1)电脑端的串口通信和文件发送软件;
2)用于接收串口数据的外部设备;
3)用于将接收到的数据进行存储的存储介质,并将数据存为文件;
4)用于控制数据传输与通信的通信协议。
通过下图可以明确方案的实现:
电脑端使用什么软件来发送文件数据呢?有人说:“用串口助手就可以了!”不错,但你有没有考虑到对于一个封锁的电脑,串口助手如何放到电脑里去?有人说:“那只能现编了?”他的意思是说如果电脑上有VC或VB等软件开发环境,我们可以自己去实现一个简易的串口通信软件。但是如果没有任何软件开发环境呢?又或者没有那么多时间去让你写这样一个软件呢?那应该如何是好呢?其实我们可以使用Windows自带的一个串口通信软件----超级终端。
光有串口通信功能还不行,还要有文件数据发送功能,以及遵循一定的通信协议(用于控制数据的传输)。其实在超级终端中都有(菜单:传送-->发送文件):
点击发送文件之后,可以看到上面的对话框,用于选择要发送的文件,以及使用的数据传输协议。我们在这里选择Xmodem。什么是Xmodem?估计很多人对这种通信协议不太了解。其实它是一种古老、经典而广泛应用的文件传输协议(Xmodem其实是FTP文件传输协议中所使用的一种协议,用于完成文件数据的传输),其过程也是很简单的。
Xmodem协议将一个文件的数据分割为若干个128字节的数据块,依次发送。为了便于数据的收发、处理以及正确性的校验。将每一个数据块都封装为如下的格式:
Xmodem支持两种对数据的校验方法:校验和与CRC冗余校验。我们使用校验和(CheckSum)。至于具体使用哪种校验方法,有专门的方法进行设置。其次,Xmodem还是一种基于等待-应答-错误重发机制的协议。通过以下实例来说明数据通信的具体过程:
1)首先,接收方(即外部设备或下位机)发送NAK。NAK是Xmodem应答机制中定
义的“无应答控制字”,其值为0X15。一开始,如果接收方发送给主机的是NAK,
则告诉主机采用校验和方式。如果发送的是’C’,则是CRC方式。如果在三秒钟内
没有收到主机的回应,则重复发送NAK(这一方面是对校验方式的设置,另一方面
其实是一个通讯握手的过程)。
2)在成功接收到主机发来的数据后,并经过数据检验无误后,即可进行存储或处理,
随后发送ACK(应答,值为0X06)。主机成功接收到应答之后,会继续发送下一个
数据块。1)与2)依次往复,直到全部数据块发送完毕。
3)最后一个数据块可能不足128字节,此时,用0X1A进行补齐。
4)在最后一个数据块发送完之后,主机在接到应答信号后,将发送EOT控制字(即传
输结束,值为0X04)。接收方收到EOT之后,发送ACK,至此全部数据传输过程
完成。
好,电脑端的串口发送文件数据的软件,以及通信协议都已经没什么问题。接下来的问题是:接收方接收到的数据存在哪里?实际传输的文件体积可能会比较大,因此我们应该选用大容量的存储器来存储文件数据,SD卡现在很流行,也很方便,就选它了。
数据在SD卡上具体应该如何存储?我们知道SD卡的最小存储单元是扇区(每个扇区有512个字节)。我们可以将接收到的数据直接依次顺序写入扇区(比如从0扇区开始,一直往后写)。这样最大的问题是,把SD卡放到电脑上,不能直接看一数据,而要借助于一些专用的软件,如Winhex等。因此,一个很好的设想被提出:如果写入到SD卡的数据,直接是文件的形式该有多好?!(这或许,更像是一种文件从串口拷出的感觉。)这里我们使用振南的znFAT,来达到将数据以文件的形式进行存储的目的。这个过程,看下图:
znFAT是由振南研发的一套功能完备、高率精简的嵌入式FAT32文件系统的解决方案。它可以在SD卡、U盘等存储设备上轻松实现各种文件操作,如文件数据读写、文件或目录的创建等等。它与Windows或Linux等操作系统上的FAT32文件系统高度兼容。
应该说,这个实验中的两大重点就是
1、Xmodem通信协议 2、znFAT文件系统方案
关于znFAT文件系统方案的内容比较多,请参见本实验源代码以及znFAT的配套应用手册。
下图是文件数据传输过程,超级终端文件传送对话框的界面:
使用的单片机为51,具体型号为 STC12C5A60S2,硬件平台如下:
代码的实现如下图:
|