S5P4418裸机之SDIO程序
简介
SDIO(Secure Digital Input and Output),即安全数字输入输出接口。它是在SD卡接口
的基础上发展而来,通常的存储设备,如TF卡,以及EMMC等存储芯片都是通过SDIO总线来通信的。
一.s5p4418的SDIO说明
s5p4418的SDIO总线的属性如上图所示,兼容MMC4.41,eMMC4.5规范,兼容SDIO3.0,最高时钟为50MHZ,总线三个通道,分别是SDIO0,SDIO1,SDIO2。
另外TF卡和EMMC是嵌入式设备中比较重要的存储设备,也是比较常用的启动设备,大多数Soc芯片上电后都是通过SDIO总线从外部存储设备中读取bootloader和镜像文件来启动我们的板子。
二. s5p4418的启动流程
本次仅仅针对TF卡启动来说明,对于s5p4418的TF卡启动流程默认是上电执行IORM代码,IROM代码是第一启动程序,然后从TF卡中读取扇区1~扇区64到内部SRAM(0xFFFF_0000)中运行,这段代码称为2ndboot,最后执行的是DDR中UBOOT程序。
三. 2ndboot的工作流程简单介绍
本来2ndboot是三星不开源的一部分代码,但是笔者不幸从网上找到了这份代码,并做了简单的研究,得出2ndboot大概的流程如下:
1. 初始化PLL等时钟
2. 初始化串口
3. 初始化DDR3
4. 初始化SDIO总线
5. 读取TF中的uboot到DDR中然后运行
注意:2ndboot不是简单的启动,它会读出TF卡的64号扇区,并检查这个扇区最后的4个字节是不是“NSIH”,然后从64号扇区解析出uboot.bin的大小,还有加载到内存哪个位置,以及运行时内存的地址,因此简单的用dd命令把2ndboot烧写到TF卡是无法正常启动uboot.bin。
这也是把uboot.bin直接用dd命令更新的到tf卡的扇区65中,有可能会启动失败的原因(仅仅针对2014版本的uboot)。而fastboot烧写uboot.bin的时候,是会更新TF卡的64号扇区的!!!
四. 裸机的SDIO程序简介
由于裸机程序是借助2ndboot启动的,因此裸机是运行在DDR中的,所以不需要初始化DDR了,我们仅仅初始化串口和SDIO,然后读出我们期望的扇区数据,由串口打印出来即可。
由于篇幅有限仅仅贴出main函数的代码:
void main(void)
{int i ,sector;U8 data[512];struct NX_SecondBootInfo TBI;//2ndboot信息表,来自扇区64Clk_Pll0_Init();Uart0_Init(); //串口初始化uart_puts("Uart Init Ok\r\n");Clk_Pll1_Init();Cpu_Freq_Init();uart_puts("CPU FCLK Init Ok\r\n"); //读出s5p4418 2ndboot 部分的加载信息SDMMC_Init_And_ReadSectors(64, (U32 *)&TBI);print_2ndboot_load_info(&TBI);/* 普通扇区读测试 */sector = 65; /* 读测试扇区 */SDMMC_Init_And_ReadSectors(sector, (U32 *)data);/* 打印扇区内容 */uart_puts("Sectors: ");uart_put_hex((U32)sector);uart_puts("\r\n");for(i = 0; i < sizeof(data); i++) {uart_put_hex8(data[i]);uart_puts(" ");if((i + 1) % 16 == 0)uart_puts("\r\n");}GPIOB12_LED_Init();while(1){/* 翻转GPIOB12作为心跳指示灯 */gpio_led_set_high();delay(50000000);gpio_led_set_low();delay(50000000);}
}
五. 裸机程序烧写
烧写方式,如果读者用的是全新的TF卡,需要把前置镜像烧写到扇区1~扇区64,然后再把
裸机程序烧写到扇区65开始的位置,上电才能正常运行,即boot_sec1~sec64.bin 文件。
5.1 烧写前置bin文件
dd if=boot_sec1~sec64.bin of=/dev/sdx seek=1
sync
注意:如果卡内事先有可以启动的镜像可以忽略烧写扇区1~扇区64,然后直接把固件烧到扇区65中
注意:/dev/sdx 要根据实际的TF卡来定,比如/dev/sdc!!!
5.2 烧写裸机程序main.bin文件
dd if=main.bin of=/dev/sdx seek=65
sync
注意:/dev/sdx 要根据实际的TF卡来定,比如/dev/sdc!!!
六.测试结果
七. 源码工程文件
下载方式:
链接:https://pan.baidu.com/s/1wS_pLhFwkH7FD0JmD42Wkw
提取码:uku7
S5P4418裸机之SDIO程序相关推荐
- 计算机裸机与应用程序及用户之间的桥梁是,2016计算机二级《MS Office》单选试题与解析...
2016计算机二级<MS Office>单选试题与解析 (1)下列叙述中正确的是 A)一个算法的空间复杂度大,则其时间复杂度也必定大 B)一个算法的空间复杂度大,则其时间复杂度必定小 C) ...
- 在ZYNQ上裸机跑ARM程序的演示
今天给大家演示如何在ZYNQ上,裸机跑ARM程序,本测试用的是米尔Z-turn Board单板,测试代码用的XILINX官方的C语言测试程序,用于测试挂接在ARM总线上的设备是否正常,并在串口终端打印 ...
- 在ZYNQ上裸机跑ARM程序演示
今天给大家演示如何在ZYNQ上,裸机跑ARM程序,本测试用的是米尔Z-turn Board单板,测试代码用的XILINX官方的C语言测试程序,用于测试挂接在ARM总线上的设备是否正常,并在串口终端打印 ...
- S5P4418裸机开发(二):LED点灯
板子型号:友善之臂Smart4418 板子原理图:Smart-1608 S5P4418芯片手册:Pi2_SOC_DS_0.1.pdf 查看原理图: PDF中搜LED: 以LED1为例,连接引脚是W24 ...
- 【ARM裸机s5pv210 】程序烧录
1.SD卡刷uboot 准备工作 (1)securcrt(115200,数据流控制全不选) (2)usb转串口驱动 (3)破坏iNand中的bootloader已从SD2启动 (4)九鼎x210_fu ...
- S5P4418裸机开发(十二):IRQ (按键中断) 串口中断
S5P4418 64个中断源,按键的GPIO口是GPIOB28-30,中断号为54: Interrupt Controller相关寄存器 寄存器 功能 VICIRQSTATUS R,相关位为1表示该I ...
- 如何判断一段程序是否是裸机程序?
在嵌入式MCU领域,一般将不移植操作系统直接烧录运行的程序称为裸机程序. 一般来说,非易失性存储,时钟,图形显示,网络通讯,用户I/O设备-都需要硬件依赖. 基于硬件基础,内存管理.文件系统.多线程调 ...
- 【程序】Marvell 88W8782/88W8801 WiFi模块创建或连接热点,并使用lwip2.1.3建立http服务器(20220213版)
本程序所用的单片机型号为:STM32F103RE.STM32F407ZG或STM32H743ZI. 复位引脚(PDN)应连接到STM32F1/F4的PA15引脚或STM32H7的PE6引脚.不连接PD ...
- 【程序】Marvell 88W8801 WiFi模块创建或连接热点,并使用lwip2.1.2建立http服务器(20200208版)
该程序是旧版本!最新版本为20220213版: https://blog.csdn.net/ZLK1214/article/details/122915474 本程序所用的单片机型号为:STM32F1 ...
- Linux下C程序的内存映像
C程序的内存映像 代码段.只读数据段 数据段.bss段 堆 栈 文件映射区 内核映射区 OS下和裸机下C程序加载执行的差异 项目实际体会 系统分配栈的大小 任务分配栈的大小 代码段.只读数据段 1.对 ...
最新文章
- 使用Postman测试导入和导出excel
- 通过过滤器控制页面输出内容
- 用jquery调用wcf下的各种错误码的解释。
- 关于Jquery的parent和parents
- 深圳敏捷云计算机科技,敏捷云 | 关于我们 | 敏捷云
- jq使用教程02_安装的问题
- 要让人人能AI的百度EasyDL,现在怎么样了?
- 实例--[QSerialPort]串口通信_vortex_新浪博客
- 51nod 1256 扩展欧几里得
- UVA 993 Product of digits
- 【笔记】《编写高质量代码:改善c#程序的157个建议》-第1章 基本语言要素(SamWang)...
- pr中如何自定义序列尺寸
- android模拟器mac版本下载,天天模拟器for Mac-天天模拟器mac版下载 V1.0.7-PC6苹果网...
- ecshop mysql密码忘记_ECSHOP后台密码忘记了怎么办
- 树莓派——TSL2561获取光强数值(C语言)
- 漂亮的带搜索框蓝黄拼色网站404页面源码
- P3437 [POI2006]TET-Tetris 3D
- 英里 英尺 英寸的换算
- 【大数据】 大数据计算系统
- “万金油”的String,为什么不好用了?
热门文章
- 看电脑头痛计算机专业,看电脑头疼怎么回事
- 计算机软件专利安全期刊论文,安全与环境学报
- ImprovedGAN论文略读
- 明源售楼系统技术解析 房源生成(二)
- 我的中国“芯”——资深后端工程师成长分享——“胡”说IC工程师完美进阶
- matlab 读取midi,matlab miditoolbox中的midi文件生成函数的改进
- windows7 内部版本7601 此windows副本不是正版 ---解决方案
- Electron入门宝典(三)菜单快捷键
- 4.7 电源管理 第五部分 ---- Windows CE设备驱动开发之电源管理
- CSP模测(一)A卷