开发板: 飞凌6410 256M DDR 2G nand (4K pagesize)


6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统  yaffs2烧录 图片显示烧录状态-LMLPHP


需要csdn帐号和资源分才可以下载,其它朋友有需要可以QQ 67016879 或 lxj_com@163.com


移植好的uboot下载地址:http://download.csdn.net/source/3561490

三星IROM boot 文档:http://download.csdn.net/source/3561602

烧录工具下载:http://download.csdn.net/source/3561492

Raw data bmp 转换工具(PIC2RAW): http://www.mculee.cn/post/%E5%9B%BE%E7%89%87,bmp,raw,%E8%BD%AC%E6%8D%A2.html


移植说明:

1.支持SD/SDHC启动,相关文件:

2.烧录bin到SD卡:

3.SD卡驱动:

4.uboot1.1.6的FAT文件系统支持:

5.支持yaffs2烧录:

6.烧录uboot:

7.LCD显示支持:


8.修改开机白屏,默认背光是关闭的,framebuffer写好后,再开背光;

9.u-boot自动执行烧录命令:

补充:之前版本是按512字节每块读的,现在改为256K每块读,速度从读100M文件需要100秒提升到只需20秒,进5倍提示,

但是我设置成512K每块读,会出现数据丢失现象。

更新代码 cpu/s3c64xx/hs_mmc.c 

void movi_read (uint addr, uint start_blk, uint blknum)
{
    uint dma=0,cmd,multi_blk,i,count,spare;

    /*Enable interrupt*/
    s3c_hsmmc_writew(s3c_hsmmc_readw(HM_NORINTSTSEN) & ~(DMA_STS_INT_EN | BLOCKGAP_EVENT_STS_INT_EN), HM_NORINTSTSEN);
    s3c_hsmmc_writew((HM_NORINTSIGEN & ~(0xffff)) | TRANSFERCOMPLETE_SIG_INT_EN, HM_NORINTSIGEN);

    /*clear interrupt*/
    ClearCommandCompleteStatus();

    ClearDMAStatus();
    ClearTransferCompleteStatus();

    spare = blknum;
    count = ( (blknum * Card_OneBlockSize_ver1) - 1 ) / (Card_OneBlockSize_ver1 * 512) + 1;


    for(i=0;i        while(!check_card_status());

        SetSystemAddressReg(addr);                           //AHB System Address For Write
        addr += Card_OneBlockSize_ver1 * 512;                //256K ++

        set_blksize_register(6,Card_OneBlockSize_ver1);      //Maximum DMA Buffer Size, Block Size
        set_blkcnt_register((spare > 512) ? 512 : spare);    //Block Numbers to read

        /*Card Start Block Address to read*/
        if (movi_hc){
            set_arg_register(start_blk);
        }else{
            set_arg_register(start_blk*Card_OneBlockSize_ver1);
        }

        start_blk += 512;

        dma = 1;
        multi_blk = (spare > 1);
        cmd = multi_blk ? 18 : 17;

        if(spare>512){
            spare -= 512;
        }


        /*CMD17 signle block, CMD18 mutil block read*/
        set_transfer_mode_register(multi_blk,1,1,multi_blk,dma);
        set_cmd_register(cmd,1,MMC_RSP_R1);

        if (wait_for_cmd_done()){
            printf("ERROR: Command NOT Complete\n");
            goto error;
        }

        /*wait for transfer complete*/
        check_dma_int();

error:
        ClearCommandCompleteStatus();

        ClearDMAStatus();
        ClearTransferCompleteStatus();
    }

    return;
}

10-25 14:39
查看更多