[求助]u盘写过程是这样的么?

我的系统采集模拟量,在插入u盘后,mega128把4M字节的flash中的数据,存储到u盘的*.txt文件中,我用的是你们提供的库和头文件进行u盘写(仅写),下面是我理解的一些东西和一些不理解的东西,请大家帮我看看,谢谢。有问号的地方都是不太明白的^_^,请高手帮忙解释一下,谢谢 初始化的一些东西: #define DISK_BASE_BUF_ADDR 0x0200 //在u盘写过程中,先把某个扇区的全部读出,然后把要修改的东西掺和进去,然后再写??问题1 #define DISK_BASE_BUF_LEN 2048 //好象这个数越大支持的u盘越多,一般u盘是512字节 #define FILE_DATA_BUF_ADDR 0x0A00 //数据先写到这里??然后通过写子程序写到u盘??问题2 #define FILE_DATA_BUF_LEN 512 //一次读写的最大数据量 #define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为"外部子程序",1为"内部复制" */区别是什么啊??问题3 #define LIB_CFG_INT_EN 0 /* CH375的INT#引脚连接方式,0为"查询方式",1为"中断方式" */这个完全理解^_^ 程序: CH375_PORT_INIT( );//我采用io模拟的读写时序,按照电路初始化自己的电路为输出或输入,这个完全理解^_^ CH375LibInit( ); /* 初始化CH375程序库和CH375芯片,操作成功返回0 */理解 while ( CH375DiskStatus != DISK_CONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘插入 */理解 mDelaymS( 200 ); /* 延时,可选操作,有的USB存储器需要几十毫秒的延时 */理解 if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查询磁盘是否准备好 有的u盘需要,有的不要*/理解 if ( DISK_BASE_BUF_LEN < CH375vSectorSize ) /* 检查磁盘数据缓冲区是否足够大,CH375vSectorSize是U盘的实际扇区大小 */理解 strcpy( (char *)mCmdParam.Create.mPathName, "\\newfile.txt"); /* 新文件名,在根目录下 */理解 CH375FileCreate( ); /* 新建文件并打开,如果文件已经存在则先删除后再新建 */理解

下面的程序基本上都读不懂了,我就按照我自己的想的说了,说错了大家别笑话!!! 部分程序省略 SecCount = (NewSize+CH375vSectorSize-1)/CH375vSectorSize;/*计算文件的扇区数,因为FILE_DATA_BUF_LEN是512字节,所以 如果CH375vSectorSize也是512字节的话,每次SecCount都是得1的,对么???*/问题4 mCmdParam.Write.mSectorCount = SecCount; /* 告诉ch375一共要进行几个扇区的读写 */

CH375FileWrite( ); /* 向文件写入数据 */

mCmdParam.Modify.mFileAttr = 0xff; /* 新的文件属性,为0FFH则不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */ mCmdParam.Modify.mFileDate = MAKE_FILE_DATE( 2004, 5, 18 ); /* 输入参数: 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 文件的大小 */ ch375_i_temp = CH375FileModify( ); /* 修改当前文件的信息,修改日期和长度 */ 修改这个工作是要自己做的啊???文件属性可以不修改,时间也可以不修改,但是日期必须自己输入么?文件的大小就是文件一共有多少个字节吧?问题5 mCmdParam.Close.mUpdateLen = 0; /* 不要自动计算文件长度,如果自动计算,那么该长度总是CH375vSectorSize的倍数 */ 是CH375vSectorSize的倍数无所谓,不自动计算我该怎么算呢?还是让它得1好了,让他自动计算,上面不是已经输入文件NewSize了么?怎么这里还要计算文件长度啊???问题6 CH375FileClose( );//终于要完事了,^_^ while ( CH375DiskStatus != DISK_DISCONNECT ) xQueryInterrupt( ); /* 查询CH375中断并更新中断状态,等待U盘拔出 */

1.对U盘的读写总是以扇区为单位,如需修改一个扇区中部分内容,那么必须把该扇区中的内容先读出来,然后根据需要修改,最后在写回U盘 2。FILE_DATA_BUF_ADDR,这是文件缓冲区首地址,用户先把数据放到文件缓冲区,然后调用写函数,库会把该缓冲区中的数据写入U盘 3。内部复制:库会自动从用户指定的文件缓冲区或默认的FILE_DATA_BUF_ADDR读取或写入数据,无需用户干预。外部子程序:用户主动向CH375的数据口写入数据或从CH375的数据口读取数据。 4。这个表达式是计算总共需要写多少个扇区,SecCount 〉= 1,具体数值有NewSize决定。 5,6两个问题有点啰嗦,涉及到修改文件大小的几种方式,你先看看CH375HF.PDF中对这两个操作的介绍


谢谢,我看一下


只有登录才能回复,可以选择微信账号登录