大容量SD卡在海洋数据存储中的应用本设计使用8 GB的SDHC(High Capacity SD Memory Card,大容量SD存储卡),为了方便卡上数据在操作系统上的读取,以及数据的进一步分析和处理,在SDHC卡上建立了FAT32文件系统。
海洋要素测量系统要求数据存储量大、安全性高,采用可插拔式存储卡是一种不错的选择。
目前,可插拔式存储卡有CF 卡、U盘及SD卡。
CF卡不能与计算机直接通信;U盘需要外扩接口芯片才能与单片机通信,增加了外形尺寸及功耗;而SD卡具有耐用、可靠、安全、容量大、体积小、便于携带和兼容性好等优点,非常适合于测量系统长期的数据存储。
1 SD卡接口的硬件设计STM32F103xx增强型系列是意法半导体公司生产的基于Cortex-M3的高性能的32位RISC内核,工作频率为72 MHz,内置高速存储器(128 KB的闪存和20 KB的SRAM),以及丰富的增强I/O端口和连接到2条APB总线的外设。
STM32F103xx系列工作于-40~+105℃的温度范围,供电电压为2.0~3.6 V,与SD卡工作电压兼容,一系列的省电模式可满足低功耗应用的要求。
SD卡支持SD模式和SPI模式两种通信方式。
采用SPI模式时,占用较少的I/O资源。
STM32F103VB包含串行外设SPI接口,可方便地与SD卡进行连接。
通过4条信号线即可完成数据的传输,分别是时钟SCLK、主机输入从机输出MISO、主机输出从机输入MOSI和片选CS。
STM32F103VB与SD卡卡座的接口电路如图1所示。
SD卡的最高数据读写速度为10 MB/s,接口电压为2.7~3.6 V,具有9个引脚。
SD卡使用卡座代替传输电缆,减少了环境干扰,降低了出错率,而且1对1传输没有共享信道的问题。
SD卡在SPI模式下各引脚的定义如表1所列。
2 SD卡接口的软件设计本设计采用STM32F103VB自带的串行外设SPI接口与SD卡进行通信,这里只介绍SPI模式的通信方式。
2.1SD卡的读写先对STM32F103VB的SPI_CRl(SPI控制寄存器)以及SPI_SR(SPI状态寄存器)进行初始化设置,使能SPI并使用主机模式;同时设置好时钟,在时钟上升沿锁存数据。
SPI通道传输的基本单位是字节,由STM32F103VB控制其和SD卡之间的所有通信。
要读写SD卡,首先要对其进行初始化。
初始化成功后,即可通过发送相应的读写命令对SD卡进行读写。
SD卡的读写流程如图2所示。
2.2 SD1.x与SD2.0标准的识别由于大容量SDHC的出现,SD1.x满足不了SDHC的容量要求,标准已经升级为SD2.0。
但也因此出现了许多电子设备无法驱动大容量SD卡的情况,如何识别SD1.x与SD2.0就显得尤为重要。
SD2.0的SPI模式初始化流程如图3所示。
判断是否为SD2.0卡,CMD8(SD2.0新增的命令)是关键。
若卡是SD2.0,则发送CMD8将会返回有效响应;若是SD1.x,则返回非法响应,这样就可以识别SD卡的类型。
SD1.x与SD2.0的最大不同在于命令地址的表示。
SD1.x的地址单位是字节,而SD2.0的地址单位是扇区,地址仍然采用32位4个字节来表示。
因此在读写操作时应该根据不同的卡对地址进行相应的处理,若是SD1.x则写入字节地址,若为SD2.0则写入扇区地址。
3 FAT32文件系统目前有3种FAT文件系统:FAT12、FAT16和FAT32。
它们的区别在于文件分配表(File Allocation Table,FAT)中每一表项的大小(也就是所占的位数):FAT12为12位,FATl6为16位,FAT32为32位。
本设计选择FAT32文件系统。
由于文件存储在硬盘上占用的存储器空间以簇为最小单位,FAT32文件系统不适合管理容量低于512 MB的存储器。
簇如果太大,存储小文件会浪费大量的存储空间;如果太小,FAT表会变大,不方便管理。
综合考虑,FAT32每簇大小为4 KB。
3.1 FAT32文件系统结构FAT32文件系统可以分为以下几部分;保留区(reservedregion),存放FAT文件系统的重要参数和引导程序;FAT区(FAT region),记录簇(cluster)的使用情况;根目录区(rootdirectory region),记录根目录信息,FAT32文件系统舍弃了这个区,根目录区可以指定为任意一个簇;文件目录数据区(fileand directory data region),是各种文件数据实际存放的区域。
保留区中的BPB表从扇区0偏移11个字节开始,共占25字节。
表2是格式化为FAT32文件系统的8 GBSD卡首扇区中读出的BPB参数内容。
逻辑加密存储卡芯片AT88SC1604卡的应用摘要:本文介绍了目前应用较为广泛的AT88SC1604逻辑加密卡的特点和工作原理,同时给出了通过单片机控制操作IC卡的的应用实例及程序。
前言IC卡按结构划分,可分为存储器卡和微处理器卡(CPU card)两大类。
逻辑加密卡与普通存储卡相比,内部结构较复杂,其存储区可以分成卡片设置区和应用区。
卡片设置区内存放与卡片厂商及发卡者相关代码和卡片密码;应用区又可以根据需要分为不同的分区。
逻辑加密卡的安全性相对较高,体现在:卡片设立主密码、每个应用分区具有各自独立的操作密码。
逻辑加密卡主要控制作用是:对数据存储区开放/关闭的控制;对数据存储区读/写的控制;对数据存储区擦除操作的控制以及对密码校验和错误次数计数及锁闭功能控制。
AT88SC1604卡的工作原理AT88SC1604是由美国ATMEL公司设计的逻辑加密存储卡芯片。
它具有15704位的存储容量,是目前逻辑加密存储卡中容量较大的一种产品芯片。
芯片特点(1) AT88SC1604芯片属于单存储器多逻辑分区结构。
主存储器除划分了特定的标志数据区和控制数据区之外,还将应用数据区分成四个完全隔离的子区,并在每个子区中配备了各自的读、写控制标志和写入/擦除密码以及密码输入错误计数器等逻辑控制。
(2) 芯片为串行传输方式,并满足ISO7816-3同步传输协议。
(3)芯片采用低功耗的CMOS工艺制造,每字位的读取时间为 s,写周期为5ms。
(4) 芯片内部的存储单元具有至少10000次的擦除/改写循环次数。
数据保存期为10年。
芯片存储分区结构及定义AT88SC1604芯片分为制造商代码区、发行商代码区、用户安全密码区、用户密码比较计数区、个人代码区以及四个应用区。
每个应用区都由密码区,密码比较计数区,擦除密码区和擦除密码比较计数区、应用数据区和存储器测试区组成。
(1) 制造商代码区(FZ)该区里记录的卡芯片生产商的特定信息(例如:生产批号、日期、以及特别制定的特征代码),由制造商在芯片出厂前写入。
在控制本区的熔丝(FUSHl)没有熔断时,该区的存储单元可以象普通的EEPROM存储单元一样进行擦除和改写。
一旦熔丝熔断,所写入的"制造商代码"就不可再更改。
(2) 发行商代码区(IZ)该区用于记录卡片发行商的特定信息(例如:发行批号、日期、地区范围编号以及特定用户编号等特征代码)。
当控制本区的熔丝没有熔断时,该区的存储单元内容可以自由的擦除或改写。
在个人化处理过程完成之后,控制该区的熔丝(FUSH2)熔断,即可将注入的“发行商代码”完全固化。
这一代码也是识别卡片的真伪,区分卡片应用类别的重要标识。
(3) 个人代码区(CPZ)该区用于存放个人身份标识数据。
该区使用上受芯片的“用户密码”的保护。
当“用户密码”比较成功,该区可读可写可擦除。
“用户密码”比较不成功,该区只能读而不能写入和擦除。
(4) 用户密码区(SC)这个密码区是整个存储器的“总控制开关”。
使用前,由授权持卡人预先输入的一个安全代码作为“参照字”储存在这个存储区里。
使用时,必须输入一个“校验密码”。
芯片将输入的“校验密码”与内部存储器的“参照字”一一比较。
如果比较结果一致,IC卡将开放整个芯片储存器(包括各分区的控制密码和各应用数据区)。
各区的“安全密码”区SCn(n=l,2,3,4)与SC的作用是完全类似的。
对于各分区的密码区SCn (n=1,2,3,4)来说,其比较操作要受到对应“应用区密码”比较计数器(SnAC)的计数控制。
当连续8次输入密码错误,SCn将被锁死。
(5) 密码比较计数区(SCAC)该区对连续输入的错误密码的次数进行累计。
当连续8次不正确的比较操作之后,芯片将被锁死。
芯片被锁死之后,将拒绝任何的擦除、写入和比较的操作命令。
该区是8位长,按位写入方式操作。
在芯片初始化时是全“1”状态,即读出值为“FFH”。
在每次比较输入的密码时,先按从高位到低位的顺序找第一个为“1”的位,将此位写“0”,然后将新输入的“校验密码”与原存储在SC区的“参照字”进行比较。
比较操作本身由芯片内部自行完成,而比较结果则通过置SV标志来判别,即比较成功时SV被置“1”。
比较不成功,SV保持原来的“0”状态。
在连续8次比较错误过程中每次比较操作之后计数器的计数值分别为“7FH”、“3FH”、“1FH”、“0FH”、“07H”、“03H”、“01H”、“00H”。
当计数器为“00H”后,后续的比较操作命令由于无法在“SCAC”区中找到一个为“1”的位,因而芯片拒绝继续执行比较操作。
SnAC(n=1,2,3,4)的作用与SCAC是类似的。
操作控制也完全一样。
只是SCAC是限制对SC区的比较操作。
而SnAC则限制对SCn区的比较操作。
SCAC的控制级别最高。
当SCAC为“00H”后,芯片内部封锁了对SC区的比较操作,从而使对SCn的比较也被禁止。
如果SCAC为非“00H”值,在对SC区的比较密码操作成功之后,SCn能否进行比较操作就由SnAC区的状态值来决定。
SnAC区在连续8次比较输入过程中,每次比较操作之后计数器的计数值与SCAC 的8个值一样。
(即分别为“7FH”、“3FH”、“1FH”、“0FH”、“07H”、“03H”、“OlH”、“00H”)当SnAC为“00H”时,则“应用n区”将被锁死。
(6)擦除密码区(EZn ,n=l.2,3,4)该区用于存储擦除应用区操作的控制密码。
这些密码一般由发行商使用。
在个人化处理时输入的最后一组“擦除密码”,在芯片熔丝FUSE2熔断之后将使“擦除密码”保存在该区内。
该区不再能读出、写入和擦除,只能进行比较操作。
在使用过程中如需对应用区进行擦除操作,都必须首先对相应的EZ区输送一个“擦除密码”与之比较,在“擦除密码比较计数器”不为“00H”的情况下,如果相比较的两代码完全一致,则相应的应用区的单元允许擦除,否则将禁止执行擦除操作。
(7) 擦除密码比较计数区(EnAC ,n=l,2,3,4)擦除密码比较计数区的作用与SCAC的作用相类似。