从我学习FATFS到现在已经2个月了,大概能操作TF卡后就开始往里写数据,还一直在改写写卡的逻辑,下面是我在写卡时总结的(可能并不适应与你)。
1、硬件:lpc2132 硬件SPI操作 22M主频
2、文件系统:FATFS R0.09
3、卡:2G、4G、16G(有的是大陆产的,有的是台湾产的。目前2G的卡有大陆和台湾产的,发现大陆的这个没台湾的好,写卡时电流不稳定,而台湾的那个很 稳)
4、数据:AD采样进来的音频数据,短的几秒钟,长得几个小时
5、方式:录完一个系统进入掉电模式,有录音需要时再起来录(每次单片机起来这里就会建立一个txt文件)
6、AD:pcm1870(谁用过这个东东呢,它老是丢数,我问ti在线支持了,他们没给我个好的解决方法,不知你们发现没有丢数这个现象)
7、采样率:8K
注意点:1、在TF卡中写时不要直接在根目录下写文件,最好先建立一个文件夹,在文件夹里写,这样工作电流就会小很多,而且电流也很稳定(主要原因)
2、一个文件夹里的txt文件数目不能太多,否则单片机从掉电模式起来到写卡时有点慢,会造成前面的数据丢失(我的2G的卡里,每个文件夹里的文件不能超过50个,超过后唤醒单片机到写卡时间过长,造成一些数据丢失)
3、小容量卡写电流小,大容量卡写电流大(2G:40mA,4G:50mA,16G:100mA,)
4、写小的文件(写几秒就要关闭的)用f_sync(&file);写大文件(就是连续写n个小时)用f_close(&file);
还在郁闷的问题:
1、第一次单片机从掉电模式起来的比较慢(大概2秒),但从第二次后起来就非常快了
注:程序到while(1)前面就进入掉电模式了,每次从掉电模式起来就到while(1)里了,执行的语句都是一模一样的啊,怎么会这样呢
2、由于第一点的迷惑,我怀疑单片机从掉电模式起来后是不是从while(1)哪里执行呢?不是说:从哪里掉电,起来时就从那里执行的吗??
3、2G的卡写电流很稳定,但4G和16G的就不怎么稳定了,尤其是16G的,写卡时电流摆动很大,即使寻址范围大也不至于电流摆动那么大吧
我的16G卡写电流摆动范围:50mA-100mA啊,天哪,手机里或别的电子产品里可不是这样啊,难道这是fatfs的原因,或是我写卡的逻辑不对????????????????????
这是我写卡的程序:SD_Write_Flag是定时器里的一个变量,如果SPI数据寄存器满了(AD给的数据),他就为1,定时器每个500us去看一次,
if(SD_Write_Flag)
{
SD_Write_Flag=0;
if(buffer_number)
{
res1 = f_write(&file, buffer1, 512, &br); //写入
f_sync(&file);
IO0SET |=1<<15; //P0.15输出高,关闭LED
}
else
{
res1 = f_write(&file, buffer0, 512, &br); //写入
f_sync(&file);
IO0CLR |=(1<<15); //P0.15输出低,点亮LED
}
} |