本帖最后由 xuande 于 2017-9-25 11:22 编辑
FatFs 实验,空白 SD 卡,先 f_mount ,再 f_open 创建一个空文件,再 f_lseek 指针后移,然后 f_write 写入新内容,f_close 结束。
单独这么一段测试程序,过程如下图,用仿真器操作,进入 main 以后先人工修改文件名,建立一个文件;之后用 reset 再重复建立文件:
int main(void)
{
u32 i, j, k, l;
SD_Error SDstatus = SD_OK;
FRESULT SDresult;
FATFS FileSystem;
FIL File;
/*--------------------------------------------*/
SDstatus = SD_Init(); // SD 卡初始化。
if ( SDstatus == SD_OK )
{
i = 0; //临时标志。
SDresult = f_mount( &FileSystem, "", 0 ); //封装 FatFs 文件系统。
if ( SDresult != FR_OK ) { i = 0xFF; }
SDresult = f_open( &File, R_tmp, FA_WRITE | FA_OPEN_ALWAYS ); //建立文件,文件名在 R_tmp[] 中。
if ( SDresult != FR_OK ) { i = 0xFF; }
SDresult = f_lseek( &File, 512 ); //移动文件读/写指针。
if ( SDresult != FR_OK ) { i = 0xFF; }
if ( i != 0 ) { i = 0xFF; } //创建文件出错,怎么处理?
//测试例子
for ( j=0; j<0xFF; j++ ) R_tmp[ j ] = j; //准备测试数据。
SDresult = f_write ( &File, R_tmp, 0xFF, &j );
SDresult = f_close( &File );
if ( ( i == 0xFF ) || ( SDresult != FR_OK ) ) i = 0xFF;
}
while( 1 );
现在问题是:
因为写数据的指针已经移到后面了,那么前面的内容应当自动、全部填充为一样的数据;
但是,只要是空白卡上建立的第一个文件,前面内容肯定不一致,0 数据中夹了一串字符 a,很莫名其妙;
而第二、第三就正常,全部为 0( NULL)。
如下图:
困扰几天了。
目前这个问题倒也能接受,
因为实际应用里,肯定要回头重新写这段数据,只要覆盖就可以了。
但是心里很不踏实。
SD卡的格式化,并不会把存储的数据全部清掉,而是清掉文件系统部分的东西。
所以数据恢复软件,才可以恢复数据。
数据存储的问题呢?
一周热门 更多>