SDCard2007年8月7日文件编号001-17546修定版**-1-1.
SDCardSDCard数据手册数据手册数据手册数据手册SDCardv1.
0赛普拉斯半导体公司2006-2007年版权所有.
所有权利均予保留.
构建配置构建配置构建配置构建配置完全文件系统完全文件系统完全文件系统完全文件系统标准文件系统标准文件系统标准文件系统标准文件系统基本文件系统基本文件系统基本文件系统基本文件系统只读文件系统只读文件系统只读文件系统只读文件系统基本读写基本读写基本读写基本读写ApproximatePSoCMemoryUse(bytes)资源资源资源资源闪存随机存储器闪存随机存储器闪存*RAM闪存*RAM闪存RAMCY8C29xxx,CY8CLED16196336291705061316437613117516134245575配置内包含的配置内包含的配置内包含的配置内包含的SDCard功能功能功能功能SDCard_clearerrXXXXXSDCard_fcloseXXXXSDCard_feofXXXXSDCard_ferrorXXXXSDCard_fflushXXXXSDCard_fgetcXXXXXSDCard_fbgetcXXXXXSDCard_fopenXXXXSDCard_fputBuffXXXXSDCard_fputcBuffXXXXSDCard_fputcXXXXSDCard_fputcsXXXXSDCard_fputsXXXXSDCard_fseekXXXXXSDCard_ftellXXXXXSDCard_CopyXXSDCard_GetFileCountXXXXSDCard_GetFilenameXXXXSDCard_GetFileSizeXXXXSDCard_InitCardXXXXXSDCard2007年8月7日文件编号001-17546修定版**-2-SDCard_PresentXXXXXSDCard_RemoveXXXSDCard_RenameXXSDCard_SelectXXXXXSDcard_StartXXXXXSDard_StopXXXXXSDCard_WriteProtectXXXX注释注释注释注释支持FAT16/32支持FAT16支持FAT16支持FAT16不兼容PC机**每个同时打开的文件需要使用24字节的RAM(用于FAT32文件系统)**每个同时打开的文件需要使用20字节的RAM(用于FAT16文件系统)请浏览www.
cypress.
com/psocexampleprojects,查看经充分配置且运行正常的此用户模块运用范例项目.
特点和概述特点和概述特点和概述特点和概述支持SD、miniSD、microSD/TransFlash、MMC、RS-MMC/MMCmobile和MMCplus.
能够处理PC机采用短文件名的FAT16/32、DOS、Windows文件(DOS8.
3格式).
打开多个文件执行读取和写入操作.
支持多个文件随机存取.
允许PSoC访问2Gb的闪存存储空间.
SDCard用户模块让用户能够在6种不同形状因子的闪存卡上访问兼容PC机的文件,而无需知道文件存取或闪存接口的具体细节.
SDCard用户模块允许最少采用4个PSoC引脚来执行基本操作.
根据卡的类型和卡座,用户可以使用其它引脚来支持写入保护、卡插入和其它操作.
此用户模块允许用户采用简单C接口来存取SD卡和MMC卡.
只要使用SDCard用户模块提供的函数,用户就不需要了解SPI总线或SD/MMC命令集如何工作.
用户可使用这些用户模块实现的SD卡或MMC卡,只要设计满足这些要求.
工作电压范围处于设计方案中所使用的电压.
用户可以SPI数据模式来对卡进行寻址.
所用卡符合在sdcard.
org或mmca.
org网址上所载明的技术规格.
SDCard2007年8月7日文件编号001-17546修定版**-3-为了使用PC机兼容卡,用户还必须遵循这些附加要求:卡格式化时采用了兼容Windows/DOSFAT16(可选FAT32)的文件结构.
卡格式化为硬盘驱动器,驱动器的第一个扇区存放分区表.
要读取的文件只能位于根目录下.
目前不支持子目录.
注意注意注意注意::::一般来说,小于32MB的卡格式化为FAT12分区.
32MB及以上的卡(FAT16最大支持16GB存储空间)格式化为FAT16分区.
但是,任何规则均有例外.
Windows或其它卡实用工具程序可能采用不同的格式来格式化卡.
例如,较大的存储卡可按照FAT32来格式化.
绝大多数卡可以作为FAT16来格式化.
检查软件中的格式化选项.
注意注意注意注意::::SDCard用户模块同时提供了采用C语言和汇编语言编写的函数库.
用户必须拥有有效的C编译器许可证,即使用户的目标应用程序只使用了汇编语言.
SDCard2007年8月7日文件编号001-17546修定版**-4-PSoC信号至闪存卡引脚信号至闪存卡引脚信号至闪存卡引脚信号至闪存卡引脚PSoC驱动类型驱动类型驱动类型驱动类型SD模块名模块名模块名模块名称称称称说明说明说明说明SDminiSDmicroSD,TransFlashMMCRS_MMS,MMCplus,MMCmobile3.
3V5VSD_CS卡选择11211强*漏极开路低电平SD_MOSISD_INPSoC至卡的命令和数据22322强*漏极开路低电平SD_MISOSD_OUT77777高Z高ZSD_CLKSD_CLK55555强*漏极开路低电平VDD3.
3V44444VSS接地3,63,663,63,6保留8,98,91,8--NC无连接-10,11---SD_CI可选上拉上拉SD_WP可选(只限SD卡----上拉上拉SDCard2007年8月7日文件编号001-17546修定版**-5-供电电压VDC2.
7-3.
6V2.
7-3.
6V2.
7-3.
6V2.
7-3.
6V2.
7-3.
6Vor1.
65-1.
95V在PSoC运行在5伏时,要求用*330电阻上拉至3.
3V.
卡引脚分配图卡引脚分配图卡引脚分配图卡引脚分配图((((底视图底视图底视图底视图))))功能说明功能说明功能说明功能说明SDCard(安全数字内存卡)用户模块能够实现SD/MMC卡接口.
此模块使用了采用SPI模式的1个数字模块来与1块SD卡通讯.
模块还使用1个或多个端口引脚用于芯片选择、卡检测和写保护通知.
PsoC与SD存储卡之间的信号被标记为SD卡相关信号.
模块有4个必需信号在功能上等于1个标准的SPI接口以及2个SD卡特有信号是可选的.
参见下列表格:信号名称信号名称信号名称信号名称说明说明说明说明SPI等同等同等同等同SD_CS卡选择(低电平有效)SSSD_DI数据输入MOSISD_DO数据输出MISOSD_SCLK接口时钟SCLKSD卡特有信号卡特有信号卡特有信号卡特有信号((((可选可选可选可选))))SD_CD卡检测(低电平有效)NASDCard2007年8月7日文件编号001-17546修定版**-6-SD_WP卡写入检测(低电平有效)NASD_SCLK信号是SPI发送/接收时钟信号.
此信号的频率输入时钟信号的时钟频率的一半.
有效发送/接收位速率即为输入时钟除以2.
输入时钟在设备编辑器窗口内设置.
在初始化期间,SD_SCLK设置为采用32kHz,在初始化以后返回至用户选定的时钟.
按照MMC/SD技术规格,初始化时的时钟必须采用小于400kHz的时钟.
由于SDCard用户模块和PSoC设备本身的限制,不能够实现MMC卡在20MHz以及SD卡在25MHz下的全速传输速率.
SD_DI信号用于从PSoC至MMC/SD卡传输数据.
此信号等于SPI主设备输出从设备输入(MOSI)信号.
SD_DO信号用于从MMC/SD卡至PSoC传输数据.
此信号等于SPI主设备输入从设备输出(MOSI)信号.
SD_SCLK能够为两个方向的数据提供时钟,并由作为主设备的PSoC模块来驱动.
此信号等同于SPI串行时钟(SCLK).
第4个信号SD_CS用于在通讯时启用MMC/SD卡.
在发送发送一序列的命令和/或数据字节之前,SD_CS信号保持为低电平,而在这一序列完成后返回至高电平状态,从而结束这次发送.
SD_CD(卡检测)和SD_WP(写入保护)信号是用于检测卡是否存在以及卡是否处于写保护状态下的可选信号.
模块允许所有API函数执行完毕后,再禁用SCCard用户模块或关闭目标系统的电源.
这样就保证了没有数据会丢失,也不会破坏MMC/SD卡的数据.
执行清空缓冲区操作并关闭所有打开的文件,然后才可禁用SDCard用户模块,或取出正在读写的卡,这种方式能够确保所有数据传输均能完成.
直流和交流电气特性直流和交流电气特性直流和交流电气特性直流和交流电气特性SD的直流和交流电气特性的直流和交流电气特性的直流和交流电气特性的直流和交流电气特性参数参数参数参数条件和注释条件和注释条件和注释条件和注释典型值典型值典型值典型值极限极限极限极限值值值值单位单位单位单位SD_SCLK最大位速率-4MHz写入速度12MHzCPU时钟2250字节/秒读取速度12MHzCPU时钟2800字节/秒可将VCC供电电压设置在SD/MMC卡所采用工作电压范围内的任意电压(典型为2.
7-3.
3VDC).
卡和PsoC微控制器均工作在3.
3VVCC下.
用户可以在设计方案中选择在5V下运行PsoC,但是随后要求在5V–3.
3V之间执行电平转换来才能与SD/MMC卡接口,从而导致方案部件和成本的增加.
放置放置放置放置SDCard用户模块能够映射到单个PSoC模块而且可以放置在任意的数字通讯模块内.
要保留用于SD_WP、SD_CD和SD_CS信号的端口引脚.
参数和资源参数和资源参数和资源参数和资源SDCard2007年8月7日文件编号001-17546修定版**-7-Build_Configuration此参数用于改变SDCard用户模块所使用的闪存和RAM的大小.
Build_Configuration数值数值数值数值用途用途用途用途完全文件系统(FullFileSystem)完全文件系统项采用了最大的闪存和RAM数量.
此项还实现了最为完整的文件系统,这样的文件系统能够同时使用FAT16和FAT32格式化闪存卡以及一些高层命令,例如文件复制、更名和删除.
标准文件系统除了不包含FAT32文件系统支持以外,标准文件系统与完全版本的文件系统相同.
因为绝大多数卡均采用FAT16来进行格式化,这样可节省2K多的代码空间,并同时继续支持绝大多数闪存卡.
基本文件系统通过取消FAT32以及文件更名和文件复制功能,基本文件系统项进一步减少了对内存的要求.
此项保留了文件删除(FileRemove)功能,因为这样能够节省500字节的闪存.
保留这项功能意味着应用程序能够按照需要创建和删除文件.
只读文件系统只读文件系统项保留了FAT16文件系统,并仍然能够读取PC机兼容文件系统.
但是,此项只能读取闪存卡文件.
在应用程序中可使用这种系统来读取配置文件以及启动加载器.
基本读写非文件系统(BasicReadWriteNoFileSystem)这种基本读写文件系统在不需要PC机兼容性时使用,例如诸如iNAD模块这样的板上闪存.
移除了文件系统所特有的API能够减少SDCard用户模块所需要的闪存和RAM数量小至5K字节.
定制配置选项用于需要为SDCard用户模块创建定制配置以满足特定应用要求的高级用户.
在使用此项时,要在项目目录下修改随模块提供的SDCard_Config.
h文件.
SDCard_Config.
h文件的符号常数文件的符号常数文件的符号常数文件的符号常数符号常数符号常数符号常数符号常数使用使用使用使用#defineSDCard_MAXFILESxxx此常数由用户模块参数窗口内的"最大打开文件数"参数来设置,并且不应当在SDCard_Config.
h文件内修改.
#defineENABLE_DEBUGFUNCT启用此项以开启调试功能.
#defineENABLE_FAT32如果要求采用FAT32时加入此项.
绝大多数采用FAT32格式化的闪存卡均可以采用FAT16进行重新格式化(用户需要采用FAT16项和基本文件系统项时).
#defineENABLE_FILESYSTEM如果要求PC兼容性,则添加此项.
此项能够启用FAT16+基本文件系统.
#defineENABLE_FILECOPY启用文件复制功能.
用户必须拥有文件系统.
#defineENABLE_FILEREMOVE启用文件删除功能.
用户必须拥有文件系统.
SDCard2007年8月7日文件编号001-17546修定版**-8-#defineENABLE_FILERENAME启用文件更名功能.
用户必须拥有文件系统.
#defineENABLE_WRITE用于任何对卡的写入操作.
使用时可以有或没有文件系统Maximum_Open_Files此参数设置了应用程序能够同时打开的文件的最大数量.
将保留充足的RAM空间来打开规定数量的文件.
在Build_Configuration项设置为完全文件系统项时,每个打开文件均要求占用24字节的RAM.
其它4个构建配置均每个文件占用20字节.
在Build_Configuration参数设置为用SDCard_Config.
h文件定制时,则最大文件数量以及每个文件所需要的RAM数量均在SDCard_Config.
h文件内设置.
时钟时钟时钟时钟SDCard用户模块的时钟来自于可用来源之一.
全局I/O总线可以用于连接时钟输入至某个外部引脚或由不同PSoC模块所生成的时钟函数.
指定VC1、VC2、VC3或其它时钟源选项之一.
为了达到最优性能,可将此时钟设置为4MHz的时钟源.
设置时钟频率为所要求位速率的2倍.
每2个输入时钟发送或接收1个数据位.
SD_DOSD_DO(数据输出)信号应当路由成一个通向PSoC的输入.
一旦此信号路由至某个引脚,就会将此引脚的驱动模式设置为"高Z(HiZ)".
SD_DISD_DI(数据输入)信号应当路由成PSoC的一个输出.
一旦选定了某个输出引脚而且信号路由至此,则设定了驱动模式.
在SD卡电源和PsoC电源均为3.
3伏的系统中,设置驱动模式为"强(Strong)".
如果PsoC必须工作在5伏下而且SD卡必须工作在3.
3伏,则设置驱动模式为"漏极开路低电平",并连接1个330欧姆的外部上拉电阻在SD_DI信号与3.
3伏电源之间.
SD_SCLKSD_SCLK即为用于SD_DI和SD_DO信号的时钟.
此引脚是一个从PSoC至SD卡的输出.
一旦选定了某个输出引脚而且信号路由至此,则设定了驱动模式.
在SD卡电源和PsoC电源均为3.
3伏的系统中,设置驱动模式为"强(Strong)".
如果PsoC必须工作在5伏下而且SD卡必须工作在3.
3伏下,则设置驱动模式为"漏极开路低电平",并连接1个330欧姆的外部上拉电阻在SD_DI信号与3.
3伏电源之间.
SD_CS_Port选择用于SD_CS信号的端口.
SD_CS_PinSDCard2007年8月7日文件编号001-17546修定版**-9-从SD_CS_Port参数所选定的端口中选择引脚.
SD_CS(卡选择)参数用作SD卡运行的使能.
此信号应路由成从PSoC至SD卡的输出.
驱动模式自动设置为内部上拉型.
SD_CD_Port选择用于SD_CD信号的端口.
SD_CD_Pin从SD_CD_Port参数所选定的端口中选择引脚.
SD_CD(卡检测)信号能够在SD卡插入卡座时测量出来.
SD_WP_Port选择用于SD_WP信号的端口.
SD_WP_Pin从SD_WP_Port参数所选定的端口中选择用于SD_WP信号的引脚.
SD_WP(写保护)引脚能够通过SD卡座检测SD卡的写保护设置.
InvertSD_DO此参数应当保持在"正常"设置项.
应用程序接口应用程序接口应用程序接口应用程序接口API库函数是SD/MMC卡接口的核心.
这些函数在编写时尽量少占用RAM和闪存空间,并同时在内存资源允许的情况下保持着类似于标准C函数对于文件的访问能力.
虽然不可能实现SD/MMC接口的所有标准文件IO函数,其中仍然包含了这些IO函数的一个基本子集,并且加入了一些其它的函数以辅助文件管理.
注意注意注意注意::::虽然库函数与标准C函数类似,但并不是在所有情况下均是完全一致的.
请参见每一个函数的入口点以了解更多信息.
还请注意,可用命令取决于构建配置(BuildConfiguration)参数.
基本读基本读基本读基本读/写命令写命令写命令写命令功能功能功能功能说明说明说明说明voidSDCard_Start(void);启动SDCard模块.
voidSDCard_Stop(void);停止SDCard模块.
voidSDCard_Select(ucharEnable);选择或释放SD卡.
ucharSDCard_InitCard(void);运行所有为了通讯而对卡进行初始化的命令.
ucharSDCard_fseek(ucharFptr,ulongOffset);寻找文件内一个特定偏移量.
ucharSDCard_fgetc(ucharFptr);从指定文件中返回下一个字符.
SDCard2007年8月7日文件编号001-17546修定版**-10-ucharSDCard_fbgetc(ucharFptr);从指定文件中返回下一个缓冲字符.
这样做的读取时间要比fgetc函数快得多,因为只需读取1个文件一次.
voidSDCard_clearerr(ucharFptr);清空文件的错误标志位.
ucharSDCard_ferror(ucharFptr);如果指定文件没有文件错误,则返回零,否则返回非零.
ulongSDCard_ftell(ucharFptr);返回下一个字符的文件偏移量以供读取或写入.
ucharSDCard_ReadSect(ulongaddress);读取1个扇区.
ucharSDCard_Present(void);如果卡存在于卡座内,则返回"1",否则返回"0".
ucharSDCard_WriteProtect(void);如果卡已经写保护,则返回"1",否则返回"0".
ucharSDCard_WriteSect(ulongaddress);写入1个扇区.
ucharSDCard_fputc(ucharData,ucharFptr);写入1个字符至某个文件.
ucharSDCard_fputs(char*str,ucharFptr);写入一个空字符结尾的字符串至某个文件.
ucharSDCard_fputcs(constchar*str,ucharFptr);写入一个空字符结尾的常数串至某个文件.
ucharSDCard_fputBuff(uchar*buff,uintcount,ucharFptr);从1个RAM缓冲区写入计数字符至某个文件.
ucharSDCard_fputcBuff(constuchar*buff,uintcount,ucharFptr);从1个ROM缓冲区写入计数字符至某个文件.
voidSDCard_fflush(ucharFptr);清空某个文件的写入缓冲区.
顶层文件函数顶层文件函数顶层文件函数顶层文件函数功能功能功能功能说明说明说明说明ucharSDCard_fclose(ucharFptr);关闭指定文件并释放指针.
ucharSDCard_fopen(uchar*Filename,constuchar*Mode);用指定模式打开所提供的文件名,并返回文件指针.
uchar*SDCard_GetFilename(uintEntry);返回文件名作为指定目录入口.
uintSDCard_GetFileCount(void);返回根目录下的文件数量.
ulongSDCard_GetFileSize(ucharFptr);返回指定文件的文件大小.
ucharSDCard_feof(ucharFptr);如果指定文件已经处于文件结束符(EOF),则返回非零,否则返回"0".
顶层写入函数顶层写入函数顶层写入函数顶层写入函数SDCard2007年8月7日文件编号001-17546修定版**-11-功能功能功能功能说明说明说明说明ucharSDCard_Remove(uchar*Filename);删除指名文件ucharSDCard_Rename(uchar*OldFilename,uchar*NewFilename);更名指名文件.
ucharSDCard_Copy(uchar*OldFilename,uchar*NewFilename);复制指名文件.
SDCard_clearerr说明:清空由文件指针所指向的文件的错误标志位.
C语言:voidSDCard_clearerr(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:无.
也请参见:SDCard_Copy说明:复制源文件至目的文件.
源文件必须存在.
目的文件可以存在,也可以不存在.
如果目的文件存在但不为空,则目的文件的内容被源文件的内容所替代.
C语言:ucharSDCard_Copy(uchar*OldFilename,uchar*NewFilename)参数:OldFilename:从其中复制的源文件.
NewFilename:复制到的目的文件.
返回值:如果成功则返回零,如果失败则返回非零.
也请参见:SDCard_fbgetcSDCard2007年8月7日文件编号001-17546修定版**-12-说明:获取当前由文件偏移量所指定的文件字符并将其作为无符号字符返回.
此函数随后递增文件偏移量并调节文件控制变量与其匹配.
文件必须打开并且拥有有效的文件句柄.
fgetc()与fbgetc()函数之间的差别在于fbgetc利用了扇区缓冲区.
在顺序读取1个文件时,此函数能够获得高于fgetc()函数的读取速度.
注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fbgetc(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:从文件中读取的当前字符.
也请参见:SDCard_fclose说明:关闭由文件指针所指定的文件.
此函数还释放了文件指针以供重新使用以及清空文件控制变量.
C语言:ucharSDCard_fclose(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:文件错误标志位定义为SDCard_ferror.
也请参见:SDCard_feof说明:返回由文件指针所指定的文件的EOF(文件结束符)文件错误标志位.
C语言:ucharSDCard_feof(ucharFptr)SDCard2007年8月7日文件编号001-17546修定版**-13-参数:Fptr:用于存取文件的文件指针.
返回值:由文件指针所指定的文件的EOF(文件结束符)文件错误标志位.
也请参见:SDCard_ferror说明:返回由文件指针所指向的文件的文件错误标志位.
C语言:ucharSDCard_ferror(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:1个包含了由文件指针所指向的文件的文件错误标志位的字节.
每个打开文件均使用自己的文件错误状态字节,并采用下列的位定义.
SDCard_ferror位位位位位位位位7EOF位位位位6WE位位位位5FPE位位位位4FFE位位位位3CE位位位位2PRE位位位位1FNF位位位位0IFN文件结尾写入错误文件指针错误文件格式错误卡错误参数范围错误文件未找到无效文件名称也请参见:SDCard_fflush说明:采用一个文件指针做为其参数并清空任何内部缓冲区.
文件保持打开.
C语言:voidSDCard_fflush(ucharFptr)参数:Fptr:用于存取文件的文件指针.
SDCard2007年8月7日文件编号001-17546修定版**-14-返回值:无.
也请参见:SDCard_fgetc说明:获取由当前文件偏移量所指定的文件字符并将其作为无符号字符返回.
此函数随后递增文件偏移量并调节文件控制变量与其匹配.
文件必须打开并且拥有有效的文件句柄.
注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fgetc(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:从文件中读取的当前字符.
也请参见:SDCard_fopen说明:搜索目录查找所提供的文件名而且用指定模式打开文件.
一旦查找到有效文件,则文件控制变量得到设置,函数返回第1个未使用文件指针作为文件参考.
如果所返回的指针等于MAXFILES参数,则表明发生了错误,或者所有可用指针均正在使用.
使用SDCard_ferror函数以便在存取文件前检查文件有无错误.
注意注意注意注意::::如果用户采用了使用Buffer2进行文件名存储的SDCard_GetFilename或其它文件名子程序,则不要使用任何可能在调用SD_fopen函数前改变Buffer2内容的任何函数.
C语言:ucharSDCard_fopen(uchar*Filename,constuchar*Mode)参数:文件名称(Filename):要打开文件的文件名字符串.
模式(Mode):允许采用下列模式:SDCard2007年8月7日文件编号001-17546修定版**-15-模式模式模式模式结果结果结果结果r打开一个现有文件以供输入w创建一个新文件,或截断一个现有文件,以用于输出.
a创建一个新文件,或附加到一个现有文件后,以用于输出.
r+打开一个现有文件进行更新(包括读取和写入),从文件起始点开始.
w+创建一个新文件,或截断一个现有文件,以用于更新.
a+创建一个新文件,或附加到一个现有文件后,以用于更新.
返回值:第1个可用文件指针.
如果返回指针等于MAXFILES,则表明发生了错误、文件名未找到、或所有可用指针均在使用中.
也请参见:SDCard_fputBuff说明:这个C函数从RAM缓冲区中写入n个字节至某个文件.
注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fputBuff(uchar*buff,uintcount,ucharFptr)参数:buff:指向RAM内数据缓冲区的指针.
count:将要写入文件的缓冲区内的字节个数.
Fptr:用于存取文件的文件指针.
返回值:如果检测到任何错误,则返回EOF.
也请参见:SDCard_fputc说明:这个C函数以1个字符数值以及1个文件指针作为自己的参数并将这个字符写入到这个文件中.
SDCard2007年8月7日文件编号001-17546修定版**-16-注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fputc(ucharData,ucharFptr)参数:Data:写入至文件的字符.
Fptr:用于存取文件的文件指针.
返回值:如果检测到任何错误则返回EOF;如果没有检测到,则返回写入的字符.
也请参见:SDCard_fputcBuff说明:从1个ROM缓冲区写入n个字符至某个文件.
注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fputcBuff(constuchar*buff,uintcount,ucharFptr)参数:buff:指向ROM内数据缓冲区的指针.
count:将要写入文件的缓冲区内的字节个数.
Fptr:用于存取文件的文件指针.
返回值:如果检测到任何错误则返回EOF;如果没有检测到,则返回写入的字符.
也请参见:SDCard_fputcs说明:向文件指针参数所指定的文件写入一个常数字符串.
SDCard2007年8月7日文件编号001-17546修定版**-17-注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fputcs(constchar*Str,ucharFptr)参数:Str:指向空字符结尾常量字符串的指针.
Fptr:用于存取文件的文件指针.
返回值:如果检测到任何错误,则返回EOF.
也请参见:SDCard_fputs说明:向文件指针参数所指定的文件写入一个空字符结尾的字符串.
注意注意注意注意::::在基本读/写模式下,Fptr是一个小于由用户指定的MAXFILES的手动指定的索引,用于指示使用哪一个偏移量.
C语言:ucharSDCard_fputs(char*Str,ucharFptr)参数:Str:指向空字符结尾字符串的指针.
Fptr:用于存取文件的文件指针.
返回值:如果检测到任何错误,则返回EOF.
也请参见:SDCard_fseek说明:设置文件偏移量为一个用户指定的数值.
这样就可以对文件内的任何区域执行随机存取.
文件必须打开并且提供了有效的文件指针.
注意注意注意注意::::在基本模式下,Fptr是所使用的存储空间(而非文件)偏移量的索引.
SDCard2007年8月7日文件编号001-17546修定版**-18-C语言:ucharSDCard_fseek(ucharFptr,ulongOffset)参数:Fptr:用于存取文件的文件指针.
Offset:在文件内要偏移的字节数量.
绝对不得超过所存取文件的大小.
返回值:文件错误标志位按照SD_ferror内的定义.
也请参见:SDCard_ftell说明:这个C函数返回下一个字符的文件偏移量以供读取或写入.
文件必须打开并且提供了有效的文件指针.
注意注意注意注意::::在基本模式下,Fptr是所使用的存储空间(而非文件)偏移量的索引.
C语言:ulongSDCard_ftell(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:包含了读取位置偏移量的无符号长整型数.
也请参见:SDCard_GetFileCount说明:返回根目录下的有效文件的数量.
C语言:uintSDCard_GetFileCount(void)参数:无.
SDCard2007年8月7日文件编号001-17546修定版**-19-返回值:根目录下的有效文件的数量.
也请参见:SDCard_GetFilename说明:返回一个指向相应目录下的以传递过来的索引编号指定的文件名的指针.
例如,1个数值为5的索引返回了目录下第5个有效文件名.
首先调用SD_GetFileCount函数来确保索引没有超过有效选择项.
注意注意注意注意::::SDCard_GetFilename()函数所返回的指针是一个指向便笺式存储器内字符串的指针.
如果此文件名字符串在以后的程序中要用到,则立刻读取并保存这个文件名.
否则,缓冲区可能被覆定而使此文件名被删除.
C语言:uchar*SDCard_GetFilename(uintEntry)参数:Entry(项):目录项的项编号.
数值5将打开根目录下的第5个有效文件.
文件不按名称排序.
返回值:指向文件名字符串的字符指针(11个字符加空字符).
也请参见:SDCard_GetFileSize说明:返回所指定文件内的字节总数.
调用此函数以确保文件大小不为零,或者任何用户函数能够处理这个大小的文件.
C语言:ulongSDCard_GetFileSize(ucharFptr)参数:Fptr:用于存取文件的文件指针.
返回值:包含了整个文件内字节数量的无符号长整型数.
也请参见:SDCard2007年8月7日文件编号001-17546修定版**-20-SDCard_InitCard说明:执行SD卡的低层通讯初始化,设置卡数据模型为SPI,检测所安装的卡类型和文件系统,并相应地更新全局变量.
在任何时候有卡插入或检测到严重的卡错误时,均可调用此函数.
此函数返回1个包含了卡类型和格式类型信息的字节.
注意注意注意注意::::在使用存储卡前,FatType项需要拥有一个0x20的数值(FA16格式化).
C语言:ucharSDCard_InitCard(void)参数:无.
返回值:1个字节,包括:卡(低半字节)0=未检测到,1=MMC,2=SD.
FAT(上半字节)00=无,0x10=FAT12,0x40=FAT16,0xB0=FAT32.
也请参见:SDCard_Present说明:报告是否有卡插入到SD卡座内.
但是,此函数并未指示卡工作正常.
使用此函数可检测卡是否已经插入或拔出,是否要调用了SD_InitCard函数,以及是否发生了错误.
注意注意注意注意::::此函数属于可选函数,并不是所有卡座均支持卡插入信号.
C语言:ucharSDCard_Present(void)参数:无.
返回值:1代表卡存在,0代表卡不存在.
也请参见:SDCard_ReadSectSDCard2007年8月7日文件编号001-17546修定版**-21-说明:读取1个绝对扇区.
所传递的地址必须是一个有效扇区边界的起始值.
有效扇区边界为零和512的倍数.
C语言:ucharSDCard_ReadSect(ulongaddress)参数:address(地址):要读取扇区的地址.
返回值:如果扇区读取成功则返回零,否则返回非零.
SDCard_Remove说明:删除指名文件.
此文件必须存在而且没有打开.
C语言:ucharSDCard_Remove(uchar*Filename)参数:文件名称(Filename):要删除的文件的名称.
返回值:如果成功则返回零,如果失败则返回非零.
也请参见:SDCard_Rename说明:将OldFilename的名称改变为NewFilename.
此文件必须存在而且没有打开.
C语言:ucharSDCard_Rename(uchar*OldFilename,uchar*NewFilename)参数:OldFilename:文件的当前名称.
NewFilename:文件的新名称.
SDCard2007年8月7日文件编号001-17546修定版**-22-返回值:如果成功则返回零,如果失败则返回非零.
也请参见:SDCard_Select说明:此函数用于启用或禁用PsoC与SD卡之间的通讯接口.
C语言:voidSDCard_Select(ucharEnable)参数:Enable(启用):选择卡被启用或禁用(1=启用,0=禁用)返回值:无.
也请参见:SDCard_Start说明:通过初始化库代码来启动用户模块.
在使用任何其它SDCard库函数或访问SD硬件之前,运行SDCard_Start函数.
C语言:voidSDCard_Start(void)参数:无.
返回值:无.
也请参见:SDCard_Stop说明:SDCard2007年8月7日文件编号001-17546修定版**-23-停止PSoC硬件设置.
应当在所有SD库函数均结束运行并且在停止所有SD卡存取操作后,运行这个SDCard_Stop函数.
C语言:voidSDCard_Stop(void)参数:无.
返回值:无.
也请参见:SDCard_WriteProtect说明:报告是否启用了SD卡写保护片来防止写入SD卡.
注意注意注意注意::::此函数是可选的,只在标准SD卡上得到支持.
如果此函数需要使用,则要确保使用支持写保护检测的SD卡座.
C语言:ucharSDCard_WriteProtect(void)参数:无.
返回值:如果进行了写保护则返回1,如果启用了写操作则返回0.
也请参见:SDCard_WriteSect写入1个绝对扇区.
所传递的地址必须是一个有效扇区边界的起始值.
有效扇区边界为零和512的倍数.
C语言:ucharSDCard_WriteSect(ulongaddress)参数:address(地址):要写入扇区的地址.
SDCard2007年8月7日文件编号001-17546修定版**-24-返回值:如果扇区写入成功则返回零,否则返回非零.
代码范例代码范例代码范例代码范例-//HelloWorldSampleProject////Description://ThisisasimpleexampleofwhatittaketowriteastringtoaSDCardFile.
////ProgramFlow://1)Waitforcardtobeinserted.
//2)Initializescardinterface.
//3)Opensfile"hello.
txt"forwriting.
Ifnotthereitcreatesthefile.
//4)Writesthestring"HelloWorld"withaCRandLF.
//5)Closesthefile.
Thengoesbacktostep'1'andwaitsforcardto//beinserted.
////Connections:////InthisexampletheSDCardUMdigitalblockisplaced//atDCB02.
Thesignalsareconnectedtothefollowpins.
SDCard2007年8月7日文件编号001-17546修定版**-25-//ThedrivemodesettingsassumethatboththeSDCardand//thePSoCareoperatingat3.
3Volts.
////SignalPortSelectDriveNote//SD_DO=>P2[3]GlobalInHighZDataOut//SD_SCLK=>P2[2]GlobalOutStrongClockIn//SD_DI=>P2[1]GlobalOutStrongDataIn//SD_CS=>P2[0]StdCPUStrongCardSelect(ActiveLow)//SD_CD=>P2[4]StdCPUPullUpCardDetect(ActiveLow)//SD_WP=>P2[5]StdCPUPullUpWriteProtect(ActiveHigh)////ALEDUserModulewasusedtodrivethebusyLEDonthe//CY3210-SDCARDdemoboardatportP2[6].
TheDriveissetto//"ActiveHigh"andtheinstancenameis"BusyLED".
-#include//partspecificconstantsandmacros#include"PSoCAPI.
h"//PSoCAPIdefinitionsforallUserModules#defineCARD_PRESENT1#defineCARD_NOT_PRESENT0SDCard2007年8月7日文件编号001-17546修定版**-26-charhelloFile[]="hello.
txt";voidmain(){charcardInfo;//Cardinformationcharfp;//FilePointerBYTECardState,oldCardState;//CardinsertedstatevariablesBusyLED_Off();//MakesureLEDisOffoldCardState=CARD_NOT_PRESENT;//InitializecardinsertionstateSDCard_Start();//initializehardwareandSDCard_libbufferswhile(1){CardState=SDCard_Present();//Getcurrentcardinsertionstateif(CardState!
=oldCardState)//Checkforachange{oldCardState=CardState;//Savelaststateif(CardState==CARD_PRESENT)//Cardinserted{BusyLED_On();//Abouttotalktocard,turnonbusyLEDSDCard_Select(SDCard_ENABLE);//SelectcardcardInfo=0;SDCard2007年8月7日文件编号001-17546修定版**-27-while(!
cardInfo)//Waitforcardtocommunicate{//initializecard,determinecardtypeandfilesystemtypecardInfo=SDCard_InitCard();}fp=SDCard_fopen(helloFile,"a");//OpenfiletoappenddataSDCard_fputcs("HelloWorld\r\n",fp);//WritestringSDCard_fclose(fp);//ClosefileSDCard_Select(SDCard_DISABLE);//DeselectcardBusyLED_Off();//TurnoffbusyLED}}}}文件系统文件系统文件系统文件系统这些注释的目的在于为想要了解更多低层功能以开发自己的应用程序或设计方案的工程师们作为参考.
磁盘结构磁盘结构磁盘结构磁盘结构SD/MMC卡的结构与典型硬盘驱动器的结构相同,并拥有以下特色,假设存储卡经过了DOS/WindowsFAT16/32格式化并采用了单一分区.
标准扇区长度为512字节.
分区表分区表分区表分区表SDCard2007年8月7日文件编号001-17546修定版**-28-磁盘的第1个扇区内包含了分区表.
分区表内保存着最多4个逻辑驱动器的信息.
每个逻辑驱动器均拥有1个16字节的条目,并从偏移量1BEhex处开始.
每个逻辑驱动器的条目包含了以扇区为单位的磁盘大小、启动扇区的位置以及其它信息.
这个扇区的最后2个字节是传统的55AA标志.
绝大多数的SD/MMC卡只分配了1个逻辑驱动区,而且SDCard用户模块接受这种惯例.
启动扇区启动扇区启动扇区启动扇区启动扇区包含了扇区所指驱动区的重要信息,包括驱动器、扇区和簇的大小.
此扇区还包含了文件分配表(FAT)的数量、大小和类型,以及许多项其它信息.
只有启动扇区的头62个字节(对于FAT32为100个字节)包含了有用的数据.
其它部分是在加电时用于启动系统的实际代码.
这个扇区的最后2个字节是传统的55AA标志.
FAT表表表表文件分配表包含了指定给文件而非扇区的簇链的映射.
1个簇是一组作为1个单元分配的顺序排列扇区.
簇的大小在启动扇区信息内设置.
对于FAT16文件系统来说,每个FAT项要求2个字节(低字节在前).
FAT总是从第2项开始.
项0和项1决定了FAT的类型.
给定文件的目录项包含了文件的大小及其在FAT内的起始入口.
起始入口可以指向链内的下一簇或FFFF以指示链的结尾.
链通常并不总是按顺序排列.
在发生这种情况时,就称为文件碎片,并会减慢文件的存取.
通常,启动扇区后跟FAT的2个副本.
目录目录目录目录根目录典型情况下包含了512个项,每个项包含32字节.
在使用短文件名(DOS8.
3格式)时,就意味着列出了最多511个文件,因为第1个位置保留供卷标使用.
(长文件名并不改变目录的大小,但由于长文件名使用了多个项来构成1个文件名,所分配的文件名数量要少得多).
每一项均可作为文件名、删除项、子目录、卷标或空白项.
包含在每个项的信息包括文件名和扩展名(或目录名/卷标)、文件类型、文件大小、起始FAT项、创建时间/日期等.
文件名为8个字符,右边填充空格,后跟扩展名,也在右边填充空格,均采用大写.
长文件名能够自动生成短文件名.
如果文件名大于8个字符,则文件名被截短至6个字符以及添加1个代字号以及1个让此文件名唯一的编号(例如"FOO.
BAR"、"MYFILE~1.
TXT"、"MANUFA~2.
XLS").
此目录跟磁盘上的FAT表之后.
注意注意注意注意::::FAT32目录作为文件处理,所以其长度是可变的.
本模块的限制值为0xFFFE个项.
文件区文件区文件区文件区文件区是目录结束后的分区内的其余部分.
文件区分割为簇,簇对应于FAT表格内的项.
请注意,为了与FAT表的项相匹配,起始簇总是簇2.
这里不存在簇0或簇1.
注意注意注意注意::::FAT12的每个项使用了3个半字节,因此,每2个项共享一个中间字节.
这是一种较早也较为复杂的方案,本用户模块并不支持此方案.
FAT32与FAT16类型类似,区别处在于每个FAT项为4个字节.
SDCard2007年8月7日文件编号001-17546修定版**-29-赛普拉斯半导体公司公司地址:198ChampionCourtSanJose,CA95134-1709电话:408-943-2600传真:408-943-4730应用支持热线:425.
787.
4814网址:http://www.
cypress.
com2007赛普拉斯半导体公司,版权所有.
此处包含的信息如有更改,恕不另行通知.
赛普拉斯半导体公司对使用任何其他非赛普拉斯产品中所包含的电路不承担任何责任.
也不对任何受专利或其他权利保护的许可作任何明示或暗示.
除非与赛普拉斯公司签订明确的书面协议,否则不得将赛普拉斯产品用于医疗、生命支持、临界控制或者安全应用,赛普拉斯公司对此使用不作任何担保.
此外,赛普拉斯并未授权其产品作为关键的零部件用于生命支持系统,因为其产品故障或失灵可能会给其用户带来严重伤害.
若将赛普拉斯产品用于生命支持系统应用之中,则表示该系统的厂商应承担因使用该产品所带来的所有风险,并赔偿赛普拉斯因此受到的任何损失.
PSoCDesigner、ProgrammableSystem-on-Chip以及PSoCExpress均为商标,并且PSoC是赛普拉斯半导体公司的注册商标.
此处所提到的所有其他商标或注册商标均为其各自的公司所有.
所有源代码(软件和/或固件)均归赛普拉斯半导体公司所有,并在世界范围内受专利保护(美国和国外)和美国版权法以及国际条约规定条款的保护.
为了创建定制软件和/或创建仅用于和可适用协议中所指定的赛普拉斯集成电路的许可证产品固件,赛普拉斯在此授予被授予方一个私人的、非专有并且不可转让的许可证以用于复制、使用、修改、创作其衍生作品和编译赛普拉斯源代码及其衍生作品.
如果没有赛普拉斯半导体公司明确的书面协议,除非上面另有规定,否则禁止对源代码进行复制、修改、翻译、编译和展示.
百纵科技:美国高防服务器,洛杉矶C3机房 独家接入zenlayer清洗 带金盾硬防,CPU全系列E52670、E52680v3 DDR4内存 三星固态盘阵列!带宽接入了cn2/bgp线路,速度快,无需备案,非常适合国内外用户群体的外贸、搭建网站等用途。C3机房,双程CN2线路,默认200G高防,3+1(高防IP),不限流量,季付送带宽美国洛杉矶C3机房套餐处理器内存硬盘IP数带宽线路防御价格/月套...
提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...
优惠码50SSDOFF 首月5折50WHTSSD 年付5折15OFF 85折优惠,可循环使用荷兰VPSCPU内存SSD带宽IPv4价格购买1核1G50G1Gbps/3TB1个$ 9.10/月链接2核2G80G1Gbps/5TB1个$ 12.70/月链接2核3G100G1Gbps/7TB1个$ 16.30/月链接3核4G150G1Gbps/10TB1个$ 18.10/月链接阿联酋VPSCPU内存SS...