经过一周的时间终于在s3c2440上把sdboot给跑起来了。整个任务是在已有的bootloader上(用usb线从pc下载的方式)修改以支持直接从sd卡上拷贝nk.nb0文件到内存并启动。
有关sd卡驱动和fat fs的实现用了3个文件来实现。sdboot.c为sd的驱动(可理解为pdd)层,主要实现一些对sd控制器的配置以及一些基本sd命令的实现和对sd卡的操作。sdmmc.c实现了从sd卡读取nk并跳到内存去运行的代码(基本可以理解为sd驱动的mdd层)。sdfat.c文件就是实现fat fs的。mdd层通过fatfs来对pdd层操作以实现读取文件。
在整个过程中遇到了很多问题,现在列举如下:
1)sd卡初始化问题
配置gpio有关sd的功能:SDCMD, SDDAT[3:0]。
使能CLKCON中的SDI位。
时钟以及计算公式:SDIPRE   = PCLK/(CLK)-1;INICLK=300000;SDCLK=24000000; MMCCLK= 15000000
cmd0-cmd55-cmd41-cmd2-cmd3-cmd7-cmd6-cmd17
2)对sd卡操作问题
SD卡包括:一个标识寄存器CID,一个相应地址寄存器RCA,一个其他参数寄存器
CSD。
对sd卡的操作是驱动通过sd controller来发相应的命令以达到读写等操作的:发送命令通过SDICmdCon[7:0]的除了开始2bit:CmdIndex放置要发送的命令号;SDICmdCon[8]开始发送命令来完成的。
检测卡的插入,直接用中断引脚的电平来判断。
判断插入的卡是否是sd卡,用命令cmd55和cmd41,因为mmc卡对cmd55不做回应。
命令9就是获取sd卡中csd寄存器的值的,该值包括很多sd卡的信息,其中就有sd卡的容量。这个值在sd卡接收到cmd9之后会以response的形式存放在sd控制器的SDI Response Register[0,1,2,3]中。在执行cmd9,cmd10等这样的命令的时候,卡的状态应该是不选中的,或直接在执行它们之前发送cmd7(0)不选中卡,不然的话会timeout。
用cmd17来读取单个block的数据,该命令要带地址参数(该参数通过cmd3命令来获取),然后根据SDIDSTA和SDIFSTA状态值来从sd控制器的SDIDAT寄存器中读出要读的数据。该命令与cmd9相反,在执行它之前要选中卡。读完一个block之后要做一些善后工作,为下次读取做好准备,不然的话checkcmdend就要一直循环了。因为用的是每次都读一个block,并地址要以block对齐,这样就要考虑要读取的地址是否是block对齐的,长度是否够一个block。
SDIDCON这个数据控制寄存器也很重要,一些对数据的操作形式就是在这里设置的。
3)fat文件系统问题
根据MBR找到分区表,根据分区表找到该分区MBR[446B+4个分区表(每个16B)+2B结束符)
分区表中的第9-12字节为该分区的启始地址(单位没sector),第13-16字节为分区的长度(单位也是sector)

转载于:https://blog.51cto.com/bluefish/71870

2440从sd卡启动wince相关推荐

  1. 基于S3C2440丛SD卡启动WinCE(或其它程序)的实现

    [楼主位] liuweiele Liuwei 积分:687 派别: 等级:------ 来自: 系统上电后,如果发现SD卡中有boot.ini文件,便按boot.ini文件中的指定参数运行,否则继续启 ...

  2. WINCE6.0+S3C6410基于SD卡启动

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  3. 嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210)

    嵌入式知识-ARM裸机-学习笔记(9):SD卡启动详解(S5PV210) 一.SD卡介绍 1. SD卡背景知识和特点 SD卡.MMC卡.MicroSD.TF卡:这些卡其实内部就是Flash存储颗粒,比 ...

  4. 第十一天: SD卡原理分析及SD卡启动详解

    主流的外存设备 内存和外存的区别: 一般是把这种(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存,把ROM(read only memory,只读存储器 ...

  5. 常见存储介质介绍以及SD卡启动系统方法

    主流的外存设备介绍 内存和外存的区别: 一般是把这种RAM(random access memory,随机访问存储器,特点是任意字节读写,掉电丢失)叫内存: 把ROM(read only memory ...

  6. ZYNQ-7000如何生成从Flash和SD卡启动的镜像文件

    将PL与PS部分一起使用,并且通过JTAG下载到板子运行.对于ZYNQ,有多种启动方式,比如从JTAG启动.从QSPI(即Flash)启动,从SD卡启动等.对于从JTAG启动的,我们直接运行程序就OK ...

  7. imx6 android SD卡启动

    工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...

  8. S5PV210体系结构与接口09:SD卡启动详解

    目录 1. MMC技术演进 1.1 NandFlash & NorFlash芯片 1.2 MMC卡 & SD卡 & MicroSD卡(TF卡) 1.2.1 代际关系 1.2.2 ...

  9. imx533 配置 制作SD卡启动文件系统

    制作SD卡启动文件系统 [1]对SD卡分区 按飞思卡尔文档列出的分区表用fdisk分区: Partition Type/Index Name Start Offset Size File System ...

最新文章

  1. 82年 AI程序员征婚启示火了!年薪百万,女生神回复
  2. 服务器光盘修复读不出盘,求助,硬盘读不出来怎么修复?
  3. 基于深度学习的事件因果关系抽取综述
  4. Appium+Python移动端 实战——教你如何xpath定位自动化测试
  5. 2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
  6. js array循环给每个对象添加元素
  7. 工业互联网推动制造业高质量发展研讨会在京召开
  8. 配置Nginx不同域名访问不同项目
  9. html如何引入lrc文件,lrc文件怎么打开?lrc是什么文件?
  10. 点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部
  11. EMU8086开发工具_微机原理
  12. Android程序员的春天!Android项目开发如何设计整体架构?太香了
  13. 没有上下音量键,如何实现fastboot 模式下unlock/lock
  14. grpc-gateway 返回值中默认值为什么不显示?
  15. 2023年软件测试的前景?测试工程师技能提升,进阶自动化测试...
  16. 奥特曼传奇英雄存档丢了怎么找回_奥特曼传奇英雄存档
  17. java调用大漠插件一键搞定!!!!!!!!!!
  18. 国内能否炒伦敦金,2023国际十大正规伦敦金交易平台排名
  19. 新版标准日本语高级_第20课
  20. nginx反向代理配置+lnmp优化+七层负载upstream+keepalived

热门文章

  1. vim编辑器基础知识总结
  2. XunSearch中常用方法整合
  3. linux可以运行多少个docker,linux – 100个docker容器与100个小型机器
  4. python file_python3之File文件方法
  5. 架构师之路 — API 经济 — RESTful API
  6. Go 语言编程 — 并发 — GMP 调度模型
  7. dyld: Library not loaded: @rpath/MySDK.framework/MySDK 错误解决
  8. 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法
  9. 【剑指offer】用两个栈实现一个队列
  10. 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker...