uboot1.1.6移植SDHC驱动、Fat支持
2013-08-17 10:27
381 查看
1、原始的uboot1.1.6只支持mmc不支持SDHC!
cpu/s3c64xx/hs_mmc.c 此驱动文件比较旧,不支持SDHC卡和SD2.0协议,SD/MMC(2G或以下)可以;
需要修改初始化函数hsmmc_init(),
SD2.0初始化卡顺序
SD rest CMD0 -> SD_SEND_IF_COND CMD8 -> 选中SD ... 具体参考移植好的代码,
更详细可以搜索SD2.0协议
SDMA也有问题,它是大块一次读完,我测试当文件大于16M时,读取的数据就不正确了。需要修改movi_read()函数,
改成每次按512Byte字节读,直到把block num读完为止,为什么要这样,我仔细看过datasheet,
原本程序应该也是没有问题,估计三星的SDMA没有做好或有BUG,网上也可以搜到,但不多。
2、用hs_mmc.c替换cpu/s3c64xx/hs_mmc.c
在Y:\urbetter-u-boot-1.1.6-v1.0\include添加linux-mmc-protocol.h和glamo-mmc.h!
在Y:\urbetter-u-boot-1.1.6-v1.0\include\asm\arch下添加:mmc.h
驱动下载地址:http://download.csdn.net/detail/longtian635241/5974279
重新编译即支持SDHC了!
3、支持大于2G的SDHC卡!
SD启动的bin文件会被分成BL1,BL2两块,移植好的uboot目录下有mkmovi脚本工具可以生成u-boot-movi.bin可供SD_Write.exe烧录;
也可以使用三星提供的IROM_Fusing_Tool工具(网上可以下载到源码,可以自己修改)烧录;
uboot的bl1和bl2的分布在Y:\urbetter-u-boot-1.1.6-v1.0\include的movi.h中定义!如果使用飞凌的SD_Write.exe的修改为:
#define PART_UBOOT_OFFSET 0x0
#define PART_ZIMAGE_OFFSET 0x40000
#define PART_ROOTFS_OFFSET 0x200000
#define PART_EXTRA_OFFSET 0x3200000
//#define MOVI_BL2_BLKCNT (PART_SIZE_BL / MOVI_BLKSIZE)
//#define MOVI_ZIMAGE_BLKCNT (PART_SIZE_KERNEL / MOVI_BLKSIZE)
#define MOVI_BL2_BLKCNT (((PART_ZIMAGE_OFFSET - PART_UBOOT_OFFSET) / MOVI_BLKSIZE) - MOVI_ENV_BLKCNT)
#define MOVI_ZIMAGE_BLKCNT ((PART_ROOTFS_OFFSET - PART_ZIMAGE_OFFSET) / MOVI_BLKSIZE)
如果没有工具也可以使用WinHex工具直接写SD卡,注意SD ,SDHC写入的偏移不一样,都是写在SD尾部,
卡的块大小可通过IROM code 全局变量globalBlockSizeHide得到,
具体看三星IROM boot文档,这些uboot代码已经写好了;
到此,sd uboot 应该可以跑起来了
3、支持FAT命令!
在smdk6410.h中添加
#define CONFIG_COMMANDS \
(CONFIG_CMD_DFL| \
CFG_CMD_CACHE
| \
CFG_CMD_USB
| \
CFG_CMD_REGINFO| \
CFG_CMD_LOADS
| \
CFG_CMD_LOADB
| \
CFG_CMD_ENV
| \
CFG_CMD_NAND
| \
CFG_CMD_MOVINAND| \
CFG_CMD_ONENAND| \
CFG_CMD_DATE
| \
CFG_CMD_PING
| \
CFG_CMD_FAT| \
CFG_CMD_ELF)
\
& ~(CFG_CMD_AUTOSCRIPT| \
CFG_CMD_BOOTD
| \
CFG_CMD_IMI
| \
CFG_CMD_RUN
| \
CFG_CMD_CONSOLE| \
CFG_CMD_DOCG3P3 | \
CFG_CMD_EEPROM | \
CFG_CMD_I2C
| \
0)
其次添加:
#define CONFIG_MMC 1 //fs/fat/fat.c中有用到!
cpu/s3c64xx/hs_mmc.c 此驱动文件比较旧,不支持SDHC卡和SD2.0协议,SD/MMC(2G或以下)可以;
需要修改初始化函数hsmmc_init(),
SD2.0初始化卡顺序
SD rest CMD0 -> SD_SEND_IF_COND CMD8 -> 选中SD ... 具体参考移植好的代码,
更详细可以搜索SD2.0协议
SDMA也有问题,它是大块一次读完,我测试当文件大于16M时,读取的数据就不正确了。需要修改movi_read()函数,
改成每次按512Byte字节读,直到把block num读完为止,为什么要这样,我仔细看过datasheet,
原本程序应该也是没有问题,估计三星的SDMA没有做好或有BUG,网上也可以搜到,但不多。
2、用hs_mmc.c替换cpu/s3c64xx/hs_mmc.c
在Y:\urbetter-u-boot-1.1.6-v1.0\include添加linux-mmc-protocol.h和glamo-mmc.h!
在Y:\urbetter-u-boot-1.1.6-v1.0\include\asm\arch下添加:mmc.h
驱动下载地址:http://download.csdn.net/detail/longtian635241/5974279
重新编译即支持SDHC了!
3、支持大于2G的SDHC卡!
SD启动的bin文件会被分成BL1,BL2两块,移植好的uboot目录下有mkmovi脚本工具可以生成u-boot-movi.bin可供SD_Write.exe烧录;
也可以使用三星提供的IROM_Fusing_Tool工具(网上可以下载到源码,可以自己修改)烧录;
uboot的bl1和bl2的分布在Y:\urbetter-u-boot-1.1.6-v1.0\include的movi.h中定义!如果使用飞凌的SD_Write.exe的修改为:
#define PART_UBOOT_OFFSET 0x0
#define PART_ZIMAGE_OFFSET 0x40000
#define PART_ROOTFS_OFFSET 0x200000
#define PART_EXTRA_OFFSET 0x3200000
//#define MOVI_BL2_BLKCNT (PART_SIZE_BL / MOVI_BLKSIZE)
//#define MOVI_ZIMAGE_BLKCNT (PART_SIZE_KERNEL / MOVI_BLKSIZE)
#define MOVI_BL2_BLKCNT (((PART_ZIMAGE_OFFSET - PART_UBOOT_OFFSET) / MOVI_BLKSIZE) - MOVI_ENV_BLKCNT)
#define MOVI_ZIMAGE_BLKCNT ((PART_ROOTFS_OFFSET - PART_ZIMAGE_OFFSET) / MOVI_BLKSIZE)
如果没有工具也可以使用WinHex工具直接写SD卡,注意SD ,SDHC写入的偏移不一样,都是写在SD尾部,
卡的块大小可通过IROM code 全局变量globalBlockSizeHide得到,
具体看三星IROM boot文档,这些uboot代码已经写好了;
到此,sd uboot 应该可以跑起来了
3、支持FAT命令!
在smdk6410.h中添加
#define CONFIG_COMMANDS \
(CONFIG_CMD_DFL| \
CFG_CMD_CACHE
| \
CFG_CMD_USB
| \
CFG_CMD_REGINFO| \
CFG_CMD_LOADS
| \
CFG_CMD_LOADB
| \
CFG_CMD_ENV
| \
CFG_CMD_NAND
| \
CFG_CMD_MOVINAND| \
CFG_CMD_ONENAND| \
CFG_CMD_DATE
| \
CFG_CMD_PING
| \
CFG_CMD_FAT| \
CFG_CMD_ELF)
\
& ~(CFG_CMD_AUTOSCRIPT| \
CFG_CMD_BOOTD
| \
CFG_CMD_IMI
| \
CFG_CMD_RUN
| \
CFG_CMD_CONSOLE| \
CFG_CMD_DOCG3P3 | \
CFG_CMD_EEPROM | \
CFG_CMD_I2C
| \
0)
其次添加:
#define CONFIG_MMC 1 //fs/fat/fat.c中有用到!
相关文章推荐
- AT91SAM9260下的U-Boot移植和添加LCD驱动支持
- 移植u-boot-1.1.6之NOR的支持
- U-boot移植 (v2012.04.1 S3C2440平台) (五) DM9000驱动支持,yaffs文件系统下载支持
- 基于TQ2440的u-boot 1.1.6移植(二)(支持nor flash nand flash )
- AT91SAM9260下的U-Boot移植和添加LCD驱动支持
- u-boot-1.1.6移植(支持yaffs 映象的烧写)
- S3C2440 U-Boot移植--Norflash驱动支持- S29AL016
- 移植uboot 1.1.6 到友善之臂 sbc2410上.(支持NAND)
- 移植uboot-1.1.6到勤研2440之二移植支持Nand Flash(和精智2440接近,仿照100ask24x0_config配置,重现韦东山的uboot-1.1.6_patch过程)
- S3C2440 U-Boot移植--Norflash驱动支持- S29AL016Jhttp://blog.csdn.net/fengyaqi123/article/details/7854484
- U-boot1.1.6移植之Makefile分析(一)——推荐linux/android驱动初学者必看文章
- 友坚U-boot-1.1.6学习及移植dm9000a驱动
- U-boot移植 (v2012.04.1 S3C2440平台) (三) Nor flash Nand flash 驱动支持
- u-boot-1.1.6下移植支持yaffs2文件系统的烧写
- u-boot1.1.6的移植 网卡支持
- 移植u-boot-2010.03问题 --- 支持dnw
- U-boot-2009.08移植(五)uboot架构中NAND Flash驱动修改
- U-boot-2009.03移植之十一:第一阶段之支持2440
- AT91RM9200Linux移植笔记(二)-移植u-boot-1.1.6
- TQ2440 u-boot-2012.04.01移植四支持NAND Flash