单片机读写U盘、cf卡开发心得

发布者:hxcp18最新更新时间:2015-08-17 来源: eefocus关键字:单片机  读写  开发心得 手机看文章 扫描二维码
随时随地手机看文章
刚做完一个项目,要求将人体心电信号采集下来,存储到海量存储设备中,可以用U盘也可以用CF卡。这个项目的难点不在采集,只要做好信号放大、滤波防干扰,就可以保证信号采集的正确性。而难点在于数据的存储,要求患者将24小时甚至更长时间的所有心电信号都存储下来,按照10ms采集一次数据那么一个小时就要400K,一天的数据存储量需要9.6M。因此一般的静态E2满足不了使用的要求,有些情况下,设备要求能够连续使用一个礼拜,而数据不能丢失,因此必须选用一个大存储量器件。我们在这个项目中选择的是U盘,当然我的一个师弟采用的CF卡也完成了数据的存储。所谓U盘就是一个带有USB接口的硬盘,如果去掉USB接口芯片,U盘内部和CF卡和普通的PC硬盘结构一样。因此很有必要研究一下硬盘的物理结构和数据分布结构。其实很多同行,也遇到过如此问题,在这里我将我的使用心得和大家交流一下,如果有何意见可以交流:jiangfuting@163.com,我有些简单的小程序可以提供给大家。我向大家推荐一本书《硬盘扇区读写技术》,当然这本书前60页讲得很详细,很有意义,至于这本书后面部分,建议大家就不要看了,呵呵,jnmcu.com 也有一些不错的资料,大家可以参考。其实单片机读写硬盘,关键是按照FAT格式读写硬盘,说白了,就是单片机要按照PC机WINDOWS的规矩来办事。我想在这里将我这个项目的心得和大家谈一下,如果有不对的地方,还请高手指正。我把单片机或者ARM读写U盘分为两种方式,就是FAT格式和非FAT格式,这里的“非FAT格式”是我自己发明的一个词,后面的部分,我还要详细的阐述。


1.非FAT格式下,读写U盘
如果我们不按照FAT格式读写U盘的话,其实很简单,我在以前的帖子中也一再坚持,就是将CF卡和U盘当作一个无限大的外部RAM,那么这种模式下,U盘和CF卡与普通的外部扩展RAM的区别就仅仅是读写U盘的时候,不能一个字节一个自己的来,必须一次512B,不能通过地址总线找到每一个RAM字节的存放地址,而必须是一个扇区一个扇区的来。如果能够接受这一点,那么,你就可以通过单片机读写U盘了。当然这还需要主意一些问题,就是你不能随意的存储和读写你的数据,你必须接受U盘的要求。其实这些要求也很简单,就是不能往FAT表的扇区写任何数据,否这,你的U盘就崩溃了,在WINDOWS下就识别不出来了,我就干过这种事情,往U盘的FAT表和FAT备份表写了一数据,最后的结果是U盘往PC机的USB口一插,计算机就死机,原因就是WINDOWS不能识别U盘,而U盘本身没有坏,就是说USB通信没有问题,有问题的是FLASH的扇区,让我写坏了,而写坏的部分恰恰是FAT表,这是一个灾难性的错误,解决的办法就是凭着各种资料,把FAT表的格式和数据通过单片机再写回去,呵呵,我用了一个上午的时间来拯救我那可怜的U盘。如果你注意了以上的问题,那么好,就可以准备用单片机读写U盘了。前面我也说了,用单片机读写U盘,必须一个扇区一个扇区的来。也就是说,我们读写的最小单位就是一个扇区512B。那么就必须要求你的单片机能够提供至少512B的RAM,我这里选用的是STC89C54RD,这个单片机能够满足我的要求,此单片机具体的信息可以查询,就不给厂家做广告了。那么就是读写的地址的问题了。此中模式下,最关键的问题就是用单片机把数据存进去,或者读出来,那么我们这个地址怎么设置,如果用汇编51的话,就是DPL1,DPH1,DPL0,DPH0怎么设置应该设置成什么?其实这也就是FLASH的地址,就是U盘数据的存放地址,如果我们用4个8位的数据来表示所有的FLASH的话,就是FFFFFFFF,那么我们寻址的范围就是200G,这么大的空间,我们怎么确定呢,jnmcu.com有些资料,可以查看。我在这里简单的说明一下:单片机写入地址=相关扇区号+32 转换成4个十六进制就可以,就是单片机的外部访问地址。其中最关键的就是相关扇区号,硬盘的存储单位不应该是扇区,而是“簇”,而单片机读写地址的关联却是扇区,应此我们还必须找清楚簇号和扇区号的关系。这种关系的找法有很多中,我参考了大量的资料总结了一下,就是FAT表的第一个扇区和第一个簇指的是同一个地方,哈哈,有的读者已经明白了,既然第一个扇区和第一个簇指的是同一个地方,那么他们的计算公式一相等,就可以得出簇和扇区的关系,在这里我总结的关系是:数据首扇区地址=(文件起始簇号-根目录簇)*每簇扇区数目+根目录扇区,这个关系是一个不变的关系,不管你是8M的U盘或者CF卡,还是200G的硬盘,这个关系肯定不变,有了这个关系,我们就可以根据簇琏来找扇区,找到扇区,转换成4个16进制的数据,就是单片机的读写地址了。至此就完成了单片机读写U盘的所有准备工作。但是这种模式下读写出来的数据不是FAT格式,但是却是一种实用,简单的读写方式,我觉得这种方式很好。

2.FAT格式下单片机读写U盘/cf卡
    我在做这个项目的时候将大部分时间都花在研究硬盘的FAT分区格式上,因为U盘和CF卡的物理结构和数据分布结构和PC硬盘的结构完全一样,而又没有系统的资料和书来介绍U盘的结构,所以我就仔细研究了一下硬盘的数据结构,JNMCU.COM 有一些U盘的资料,也不是太全面。通过仔细的查看硬盘的结构,我们就会发现硬盘的分布结构是固定的,有它自己的规律,我们掌握了这种规律就可以一步一步来分析。现在有很多厂家和公司提供单片机读写U盘的子程序库,我当时看一下,不大喜欢他们做的程序库,首先他们的程序不公开,也就是说,我们想学习的话,只能学习他们子程序的用法,再有,他们做的容错机制太多,做的处理太负责,应此光光他们的程序库就20多K,而我们单片机的硬件资源是很有限的FLASH都不是太大,我们还要留着自己的代码空间进行数据处理,应此,子程序库我不推荐使用。我觉得,找到其中的规律按照规律编写自己的代码是很方便的。也有的同仁要说,你做的程序稳定吗?可靠吗?FAT需要很多容错机制的,我想说,没用,一旦出了错,就是在好多容错机制都已经于事无补了,最好的办法,就是做好系统后,自己多测试,我做的便携式心电监护仪,一次采集30M的数据,数据格式就是1.TXT,就是一个记事本,我联系测试了1个月,没有发生一次数据存储不稳的情况,现在这个产品已经广泛应用在医疗设备中。所以,不要说你考虑的了就是好事,我认为,先作出来,然后多做测试,自己心中就不会心虚。  

      现在详细的讲一下FAT的数据结构。硬盘的物理结构应该是FAT表的BPB表-FAT表-FAT表的备份表-FDT表(根目录扇区)-DATA区。找到这些规律,我们关心其实就是DATA区。进行寻址的方式就是簇琏寻址的方法。首先要找到U盘的FAT表的BPB表,这里有U盘最基本的信息,包括每扇区自己数,每簇扇区数,保留扇区数,FAT表的数目,每个FAT表的扇区数,根目录其实簇号等最基本最重要的信息。找到这个信息后,通过扇区和簇的关系(前面已经将过),就可以找到文件的FDT表的第一个扇区的第一个簇,找到这些数据以后就好办了。就可以按照硬盘的簇琏寻址方法进行读写了。

 以上是本人在开发便携式心电监护仪中单片机读写U盘的一点心得和开发笔记,希望行家里手多多指正,也希望刚刚开始开发的同行多多交流

关键字:单片机  读写  开发心得 引用地址:单片机读写U盘、cf卡开发心得

上一篇:MSP430G2553测试程序(温度检测)
下一篇:ISP和JTAG

推荐阅读最新更新时间:2024-03-16 14:28

基于uC/OS-II和MSP430单片机的RTOS的技术分析
   单片机作为嵌入式信息产品的一个重要应用方面,其使用、设计面临着全新的挑战。一方面,人们对嵌入式产品的要求越来越高,稳定可靠、功能丰富、物美价廉的信息产品将成为人们的首选。另一方面,随着微电子工艺水平的发展,单片机处理器的能力不断提高,从最初的8位单片机到16位,进而32位单片机,功能越来越强大,执行速度越来越快,集成度、精确度也越来越高,应用领域进一步拓宽。可以说,单片机芯片的性能已经能够满足现代人们对嵌入式信息产品的更高要求。为了能将二者有效地结合起来,嵌入式RTOS的软件设计方法也取代了以前的前后台(超循环)设计方法,越来越受到重视和应用。   正如分时操作系统中Linux的出现打破了Windows一统天下的局面一
[单片机]
基于uC/OS-II和MSP430<font color='red'>单片机</font>的RTOS的技术分析
基于单片机的简易数字R-V-I测试仪的设计
0 引言 当前大量使用的一种基本的测量工具,广泛应用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,显示出强大的生命力。针对电阻、电压及电流三个基本电量的测量,本文设计了一个简易的数字多用表。 1 总体设计方案 1.1 功能要求 本系统采用8位8路A/D转换器ADC0809和AT89S52单片机,设计了一台数字多用表,能进行电阻、电压和电流的测量,测量结果通过LED数码管显示,通过按键进行测量功能转换。电压测量范围为0~20 V,测量误差约为±0.02 V;电流测量范围为1~100 mA,测量误差约为±0.5 mA;电阻测量范围为0~100kΩ,1k以内测量误差约为±2Ω。 1.2 系统总体设计框图
[单片机]
基于<font color='red'>单片机</font>的简易数字R-V-I测试仪的设计
功耗测量辅助微控制器的选择
当设计工程师为低功耗应用选择微控制器时,芯片厂商的数据手册所提供的帮助是有限的。手册不能提供业界标准的功耗评价方法,也不能说明像高速缓存(Cache)和集成浮点运算单元等功能部件是怎样影响能量消耗和性能的。 当工程师尝试比较包含了片上系统(System-on-chip)的处理器内核时,如何解释这些部件或单元带来的好处成了一个难题。供应商也用芯片的典型消耗电流数值来衡量他们的微控制器,但这种测量几乎不能说明应用运行不同程序的能量消耗。为了解决这个问题,嵌入式处理器基准协会(Embedded Processor Benchmark Consortium——EEMBC)提出了一种在特定载荷下测量能量消耗的方法。本文中我们将以ARM-9为
[单片机]
STM8系列单片机定时器操作
1、void TIM1_DeInit(void) //复位TM1所有寄存器参数 2、使能TIM_1所用时钟 CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE) 3、设置定时器周期 函数void TIM1_TimeBaseInit(uint16_t TIM1_Prescaler, TIM1_CounterMode_TypeDef TIM1_CounterMode, uint16_t TIM1_Period, uint8_t TIM1_RepetitionCounter) 第一个参数:定时器的预分频系数
[单片机]
51单片机自动红外洗手器程序
单片机源程序如下: #include reg52.h #include intrins.h #include Delay.h #include Time.h #include L298.h #include main.h #include ADC0832.h #define uint unsigned int #define uchar unsigned char unsigned long volt;//测量的电压值 unsigned char volt1=0; unsigned char OPEN_Flag=0; unsigned char one_times=0; /*------------------------
[单片机]
51<font color='red'>单片机</font>自动红外洗手器程序
单片机引脚直接驱动LCD
LED数码管的驱动是比较简单也容易理解的,多位数码管一般是LED阵列的形式,每个数字使用一个公共端,不同数字的对应同笔段使用一个控制端;驱动采用分时扫描没个数字位,动态显示。但是LED比较费电,我想做一个用电池供电的钟,用发光管电池就撑不了多久了。于是我考虑用液晶。 在这边的电子市场我买到一个4位笔段式液晶屏,4个数字最中间有冒号,边上还有几个箭头符号,一共有15个引脚,正合适用AVR来驱动做一个钟。 笔段式LCD屏的结构与LED数码管很相似,但是由于是液晶,工作机理上不同,驱动方式也有很大差异: (1) LED有正负之分,液晶笔划没有。 (2) LED在直流电压下工作,液晶需
[单片机]
<font color='red'>单片机</font>引脚直接驱动LCD
基于单片机的人体阻抗测量系统
  引 言   医学阻抗测量是利用生物组织与器官的电特性及其变化,提取与生物体生理、病理状况相关的生物医学信息的一种检测技术。它通常借助于驱动电极向检测对象送入一微小的交变电流(或电压)信号,同时测量两极的电压(或电流)信号,从而计算出相应阻抗,然后应用于不同目的。   本设计利用MSP430F149自带的串口通过RS485进行远距离实时传输,上位机可将实时数据进行曲线绘制、数据保存等处理。   1 系统结构   系统采用TI公司的MSP430F149单片机。该单片机有60 KB Flash、2 KB RAM,具有强大的数据处理能力。单片机通过向AD9852发送频率字、幅度字从而控制正弦波的频率、幅度。正弦波经过电流转电压、
[单片机]
基于<font color='red'>单片机</font>的人体阻抗测量系统
采用P87LPC764单片机中央空调能管理系统
  常见的控制方法是按“高、中、低、关”分档模式控制,其缺点是房间的温度需要手动调节,各种环境因素的变化常常会使人感到不适。风机转速控制方案,采用变频器调速控制,有效地解决了上述问题,达到了室内温度自动调节的目的,大大的节省了能源。   中央空调系统主要由制冷机、冷却水循环系统、冷冻水循环系统,风机盘管系统和散热水塔组成。制冷机通过压缩机将制冷剂压缩成液态后送蒸发器中与冷冻水进行热交换,将冷冻水制冷,冷冻水泵将冷冻水送到各风机风口的冷却盘管中,由风机吹送冷风达到降温的目的。在系统中,冷动泵、冷却泵、水塔风扇变频器采用开环控制,由维护人员根据季节不同和负荷的变化进行调节,在每一个房间内都安装热交换器和循环风机,通过控制风机的转速来
[单片机]
采用P87LPC764<font color='red'>单片机</font>中央空调能管理系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved