SD卡mmc.bin的理解

对于普通的SD卡,我有个2gsd卡,拿它作为例子:

1)使用本站提供的windows工具完全格式化一次你的sd

2)进到ubuntu环境下查看SD卡扇区数量:

zswan@zswan-laptop-ubuntu:~/tmp$ sudo fdisk /dev/sdb1

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').

Command (m for help): p

Disk /dev/sdb1: 2059 MB, 2059278848 bytes

64 heads, 62 sectors/track, 1013 cylinders

Units = cylinders of 3968 * 512 = 2031616 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000


计算扇区数量:

2059278848/512 = 4022029个扇区,按图1的结构,BL1应该烧写在第4022029-18=4022011个扇区当中。BL2应该烧写在第(4022011-BL2扇区数)的中。

飞凌提供的MMC启动的bin文件,其实就是个支持SD卡的uboot,其结构是这样的:


所以为了一次性烧写方便,MMC.bin其实应该是BL2代码BL2的前8k字节作为BL1的代码。但是由于BL2,BL1是分着烧写的,不大方便,所以干脆在BL2的后面再附上一个BL1的相同代码,这样结合出来的mmc.bin,我只需要把它烧写到:4022029-2-560mmc.bin280k=560个扇区)= 4021467起始的扇区中去,就可以了。

烧写方法:

Ubuntu环境下:

sudo dd of=/dev/sdb1 if=./mmc.bin count=560 seek=4021467

这样就可以了。

SDHC的类同,只是总的扇区数减去(1026+560)才是mmc bin烧写的位置。


(二)
拷贝的过程


BL1被拷贝到8ksteppingstone中这个是硬件就做好了的。但是BL2被拷贝到SDRAM中是BL1中的代码实现的。在BL1中也使用了IROM硬件code定义好了的copyMMCtoMEM函数,直接从MMC中拷贝BL2的代码。


两次拷贝执行完后MMC.BIN作为一个完整的uboot就已经被拷贝到SDRAM中了。


ok6410的开发板上,SDboot主要的作用就是启动mmc.BINuboot去初始化NAND,把保存在sd
中的uboot.bin, zImage拷贝到内存中,然后写进NAND中,是为了从NANDboot做准备的。


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: sd_mmc.begin函数是用于初始化SD的函数,而1bit模式是SD的最低速模式,也是默认模式。因此,如果没有特殊要求,sd_mmc.begin默认就是使用1bit模式进行初始化SD。如果需要使用高速模式,可以在sd_mmc.begin函数中传入参数来进行设置。具体可以参考SD的相关文档或者库函数的使用说明。 ### 回答2: sd_mmc.begin使用1bit模式是为了在SD或者MMC(MultiMediaCard)上进行数据传输时只使用一个数据线进行传输。1bit模式是最基本的模式,只需要一条数据线即可完成数据的读写操作。 在1bit模式下,数据的传输速度可能会相对较慢,因为只有一个数据线用于传输数据。但是这种模式具有较低的硬件要求,能够适用于一些资源受限的系统,例如某些嵌入式设备或者具有有限IO引脚的微控制器。 在使用sd_mmc.begin函数时,将通信模式设置为1bit模式,可以通过设置相应的数据引脚,例如通过Arduino的SD库来实现。首先需要初始化SD或者MMC,并且确保片已经正确插入到读器中,然后使用sd_mmc.begin函数进行初始化。 在1bit模式下,只需要一个数据引脚连接SDMMC的DI线(数据输入线),通过该线进行数据的读写操作。然后可以使用sd_mmc.read或sd_mmc.write等函数来读取或写入数据。 需要注意的是,虽然1bit模式可以满足基本的数据读写需求,但是在一些对速度要求较高的应用场景中,可以考虑使用更高的模式,例如4bit模式或更高的模式,以实现更快的数据传输速度。 ### 回答3: sd_mmc.begin使用1bit模式时,是指在使用SDMMC进行通信时,每次传输数据的时候只使用一个数据线。通常情况下,SDMMC具有多个数据线,例如4位数据线的SD可以同时传输4个位的数据,传输速度更快。 使用1bit模式的好处是相对简单,电路设计和连线较少,有助于降低系统成本。同时,由于只有一个数据线传输数据,数据的传输速度相对较慢,可以降低对高速传输的要求。在某些情况下,特别是对于低速读写需求或资源有限的嵌入式系统来说,使用1bit模式是一个合理的选择。 然而,需要注意的是,使用1bit模式可能无法满足高速读写的需求。对于需要更高速传输的应用,可以考虑使用更多数据线的模式,例如4位或8位数据线模式。这样可以提高数据的传输速度。 综上所述,sd_mmc.begin使用1bit模式时是为了简化电路设计和降低系统成本,并适用于对传输速度要求不高的场景。但对于需要更高速传输的应用,可以考虑使用更多数据线的模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值