我用例程往sd卡里面循环写入数据
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "sram.h"
#include "malloc.h"
#include "string.h"
#include "mmc_sd.h"
#include "ff.h"
#include "exfuns.h"
#include "usmart.h"
#include "fattester.h"
#include "stdio.h"
//ALIENTEK????STM32??·?°????é40
//FATFS ???é
//?????§????www.openedv.com
//?????????í??×?????????????
u8 a[3]={1,4,2};
u8 Read_SD_buff[60]={51,55,54};
u8 buffer[12];
int main(void)
{
u32 total,free;
u32 t=0;
u16 i=0;
u32 xx=0;
delay_init(); //???±??????????
NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì????????
uart_init(9600); //?®??????????9600
LED_Init(); //LED??????????
LCD_Init(); //?????????§
KEY_Init(); //??????°??ü
exfuns_init(); //??fatfs?à??±????ê??????
usmart_dev.init(72);
mem_init(SRAMIN); //????????????????
POINT_COLOR=RED;//?è??×??????ì??
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"FATFS TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"Use USMART for test");
LCD_ShowString(60,130,200,16,16,"2012/9/18");
while(SD_Initialize()) //?ì??SD?¨
{
LCD_ShowString(60,150,200,16,16,"SD Card Error!");
delay_ms(200);
LCD_Fill(60,150,240,150+16,WHITE);//????????
delay_ms(200);
LED0=!LED0;//DS0????
}
exfuns_init(); //??fatfs?à??±????ê??????
f_mount(0,fs[0]); //????SD?¨
f_mount(1,fs[1]); //????FLASH.
while(exf_getfree("0",&total,&free)) //????SD?¨??×??????????à????
{
LCD_ShowString(60,150,200,16,16,"Fatfs Error!");
delay_ms(200);
LCD_Fill(60,150,240,150+16,WHITE);//????????
delay_ms(200);
LED0=!LED0;//DS0????
}
while(mf_unlink("0://test1.txt")); //??????±?
while(mf_open("0://test1.txt",0X04)); //???¨??±?
while(mf_close()); //??±???±?
while(1)
{
while(mf_open("0://test1.txt",0X02));
sprintf((char*)buffer, "%d",3456);
for(i=0;i<60;i++){
xx=240*t+i*4;
while(mf_write(buffer,3));
while(mf_lseek(xx));
}
while(mf_write("\r\n",3));
while(mf_close());
t++;
delay_ms(100);
LED0=!LED0;
}
}
[/mw_shl_code]
这样写入很多都是对的,但是当我写数据加长,偏移地址给大
[mw_shl_code=c,true]#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "sram.h"
#include "malloc.h"
#include "string.h"
#include "mmc_sd.h"
#include "ff.h"
#include "exfuns.h"
#include "usmart.h"
#include "fattester.h"
#include "stdio.h"
//ALIENTEK????STM32??·?°????é40
//FATFS ???é
//?????§????www.openedv.com
//?????????í??×?????????????
u8 a[3]={1,4,2};
u8 Read_SD_buff[60]={51,55,54};
u8 buffer[12];
int main(void)
{
u32 total,free;
u32 t=0;
u16 i=0;
u32 xx=0;
delay_init(); //???±??????????
NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì????????
uart_init(9600); //?®??????????9600
LED_Init(); //LED??????????
LCD_Init(); //?????????§
KEY_Init(); //??????°??ü
exfuns_init(); //??fatfs?à??±????ê??????
usmart_dev.init(72);
mem_init(SRAMIN); //????????????????
POINT_COLOR=RED;//?è??×??????ì??
LCD_ShowString(60,50,200,16,16,"WarShip STM32");
LCD_ShowString(60,70,200,16,16,"FATFS TEST");
LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"Use USMART for test");
LCD_ShowString(60,130,200,16,16,"2012/9/18");
while(SD_Initialize()) //?ì??SD?¨
{
LCD_ShowString(60,150,200,16,16,"SD Card Error!");
delay_ms(200);
LCD_Fill(60,150,240,150+16,WHITE);//????????
delay_ms(200);
LED0=!LED0;//DS0????
}
exfuns_init(); //??fatfs?à??±????ê??????
f_mount(0,fs[0]); //????SD?¨
f_mount(1,fs[1]); //????FLASH.
while(exf_getfree("0",&total,&free)) //????SD?¨??×??????????à????
{
LCD_ShowString(60,150,200,16,16,"Fatfs Error!");
delay_ms(200);
LCD_Fill(60,150,240,150+16,WHITE);//????????
delay_ms(200);
LED0=!LED0;//DS0????
}
while(mf_unlink("0://test1.txt")); //??????±?
while(mf_open("0://test1.txt",0X04)); //???¨??±?
while(mf_close()); //??±???±?
while(1)
{
while(mf_open("0://test1.txt",0X02));
sprintf((char*)buffer, "%d",3456);
for(i=0;i<60;i++){
xx=300*t+i*5; //偏移地址增加,
while(mf_write(buffer,4)); //写入字节增大
while(mf_lseek(xx));
}
while(mf_write("\r\n",3));
while(mf_close());
t++;
delay_ms(100);
LED0=!LED0;
}
}
[/mw_shl_code]
偏移地址那里,偏移地址改大,就不对了,SD卡插到电脑上,前一段是对的,后面开始错位,最后就还乱码
请问,这是什么原因?? |