TrueFFS原理及其在CF卡上的实现
FLStatus cfMTDIdentify(FLFlash*pVol);
数据结构中的主要参数赋值如下:
pVol->type=CF_ID; /*器件ID号*/
pVol->erasableBlockSize=512;/*可擦除的最小单元是512B*/
pVol->chipSize=0x4000000;/*器件容量为64MB*/
pVol-write=cfWriteRoutine;/*写函数*/
pVol->read=cfReadRoutine;/*读函数*/
pVol->rease=cfEraseRoutine;/*擦函数*/
pVol->map=cfMap;/*将CF卡的一段区域映射到内存空间*/
CF卡的读函数比Flash的读函数繁琐。它和写一样,必须根据一定的算法来读取数据,而Flash只需要直接从地址中读数据。但是,CF卡的擦函数非常简单,直接返回就可以了。因为CF卡可以直接调用写命令写入数据,CF卡本身能够自动完成擦除操作。CfMap函数将CF卡的一段区域映射到存储空间,一般为4KB。因为CF卡的40MB
地址空间并不映射到系统的存储空间中,映射可以加快系统访问CF卡的速度,而Flash的地址空间,所以Flash的MTD驱动中的该函数可以为空。
最后,识别函数必须在MTD驱动表单mtdTable[]中注册:
#ifdef INCLUDE_MTD_CFCARD
cfMTDIdentify,
#endif
并增加函数声明:extern FLStatus cfMTDIdentify (FLFlash vol).
3.3 Socket层
文件sysTffs.c实现了Socket层的功能。sysTffsInit()函数是主函数,调用Socket注册函数cfSocketRegister(),初始化Socket数据结构FLSocket。
LOCAL void cfSocketRegister (void){
FLSocket vol=flSocketOf(noOfDrives);
tffsSocket[noOfDrives]=“F”/*Socket名称*/
vol.window.baseAddress=CF_BASE_ADRS>>12;/*窗口的基地址*/
vol.cardDetected=cfCardDetected;/*检测CF卡是否存在的函数*/
vol.VccOn=cfVccOn;/*CF卡上电函数*/
vol.VccOff=cfVccOff;/*CF卡继电函数*/
vol.initSocket=cfInifSocket;/*CF卡初始化函数*/
vol.setMappingContext=cfSetMappingContext;/*CF卡映射函数*/
vol.getAndClearCardChangeIndicator=cfGetAndClearCard ChangeIndicator;/*设置改变函数*/
vol.writeProtected=cfW
《TrueFFS原理及其在CF卡上的实现(第3页)》