发新帖我要提问
12
返回列表
打印
[应用相关]

STM32F407 FSMC驱动MT29F4G08A NAND FLASH源代码分享

[复制链接]
楼主: 观海
手机看帖
扫描二维码
随时随地手机跟帖
21
观海|  楼主 | 2021-7-2 11:17 | 只看该作者 回帖奖励 |倒序浏览
//ECC校正函数
//eccrd:读取出来,原来保存的ECC值
//ecccl:读取数据时,硬件计算的ECC只
//返回值:0,错误已修正
//    其他,ECC错误(有大于2个bit的错误,无法恢复)
u8 NAND_ECC_Correction(u8* data_buf,u32 eccrd,u32 ecccl)
{
        u16 eccrdo,eccrde,eccclo,ecccle;
        u16 eccchk=0;
        u16 errorpos=0;
        u32 bytepos=0;  
        eccrdo=NAND_ECC_Get_OE(1,eccrd);        //获取eccrd的奇数位
        eccrde=NAND_ECC_Get_OE(0,eccrd);        //获取eccrd的偶数位
        eccclo=NAND_ECC_Get_OE(1,ecccl);        //获取ecccl的奇数位
        ecccle=NAND_ECC_Get_OE(0,ecccl);         //获取ecccl的偶数位
        eccchk=eccrdo^eccrde^eccclo^ecccle;
        if(eccchk==0XFFF)        //全1,说明只有1bit ECC错误
        {
                errorpos=eccrdo^eccclo;
                printf("errorpos:%d\r\n",errorpos);
                bytepos=errorpos/8;
                data_buf[bytepos]^=1<<(errorpos%8);
        }else                                //不是全1,说明至少有2bit ECC错误,无法修复
        {
                printf("2bit ecc error or more\r\n");
                return 1;
        }
        return 0;
}



使用特权

评论回复
22
观海|  楼主 | 2021-7-2 11:18 | 只看该作者
int main(void)
{        
        u8 *buf;
        u8 *backbuf;
    u8 res;       
        u16 i;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);                //初始化串口波特率为115200
        led_init();                                        //初始化LED
        FSMC_SRAM_Init();                        //初始化外部SRAM  
       
        my_mem_init(SRAMIN);                //初始化内部内存池
        my_mem_init(SRAMEX);                //初始化外部内存池
        my_mem_init(SRAMCCM);                //初始化CCM内存池
       
        while(FTL_Init())                            //检测NAND FLASH,并初始化FTL
        {
                printf("NAND Error!  Please Check\r\n");         
                delay_ms(500);       
        }       
        backbuf=mymalloc(SRAMIN,NAND_ECC_SECTOR_SIZE);        //申请一个扇区的缓存
        buf=mymalloc(SRAMIN,NAND_ECC_SECTOR_SIZE);                //申请一个扇区的缓存
        sprintf((char*)buf,"NAND Size:%dMB",(nand_dev.block_totalnum/1024)*(nand_dev.page_mainsize/1024)*nand_dev.block_pagenum);
        printf("%s\r\n",buf);        //显示NAND容量  
       
       
        for(i=0;i<NAND_ECC_SECTOR_SIZE;i++)
        {
                buf[i]=i;
        }
        printf("Writing data to sector..\r\n");
        res=FTL_WriteSectors(buf,2,NAND_ECC_SECTOR_SIZE,1);//写入扇区
       
        if(res==0)
                printf("Write data successed\r\n");//写入成功
        else
        {
                while(1)
                {
                        printf("Write data failed\r\n");//写入失败
                        delay_ms(500);       
                }
        }
       
       
        FTL_ReadSectors(backbuf,2,NAND_ECC_SECTOR_SIZE,1);//预先读取扇区0到备份区域,防止乱写导致文件系统损坏.
       
        res=FTL_ReadSectors(buf,2,NAND_ECC_SECTOR_SIZE,1);//读取扇区
       
        if(res==0)//读取成功
        {
                printf("Sector 2 data is:\r\n");
                for(i=0;i<NAND_ECC_SECTOR_SIZE;i++)
                {
                        printf("%x ",buf[i]);//输出数据
                }
                printf("\r\ndata end.\r\n");
                printf("USART1 Send Data Over!  \r\n");
        }
       
       
       
        while(1)
        {       
                turn_prog_led();
                delay_ms(10);   
        }          
}


使用特权

评论回复
23
nmgbtzyf| | 2022-1-28 11:01 | 只看该作者
可不可以给一份工程文件?

使用特权

评论回复
24
jtracy3| | 2022-11-17 10:51 | 只看该作者
STM32f429的FMC和STM32f407的FSMC一样用吗

使用特权

评论回复
25
kkzz| | 2022-11-17 11:05 | 只看该作者
STM32F407ZGT 能驱动3.5寸触摸屏吗?

使用特权

评论回复
26
uiint| | 2022-11-17 11:25 | 只看该作者
fsmc用来做高速计数器传输速度够吗?

使用特权

评论回复
27
pl202| | 2022-11-17 11:57 | 只看该作者
FSMC:灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储卡连接

使用特权

评论回复
28
pixhw| | 2022-11-17 12:35 | 只看该作者
fsmc接收到什么信号进行的读写操作

使用特权

评论回复
29
fengm| | 2022-11-17 13:20 | 只看该作者
stm32 FSMC读取NAND速度能多快  

使用特权

评论回复
30
tabmone| | 2022-11-17 14:15 | 只看该作者
STM32的FSMC频率一般能到多少 ?   

使用特权

评论回复
31
wangdezhi| | 2022-11-17 15:58 | 只看该作者
如果STM32与FPGA用fsmc通信的话,fsmc的速度由什么决定

使用特权

评论回复
32
1988020566| | 2022-11-17 20:22 | 只看该作者
fsmc总线同时接多个外设会相互影响吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则