uboot内读写gpio操作实现

目的:为uboot添加判断gpio电平的操作,修改对内核的跳转

1.查参考手册Register Map
R: read only, W: write only, R/W: both read and write

 

 

  在uboot跳转之前,可以查看相关状态;

附:U-boot中的nboot命令介绍
-原文链接:https://blog.csdn.net/laotang365/article/details/45181045

U_BOOT_CMD(nboot, 4, 1, do_nandboot,
"boot from NAND device",
"[partition] | [[[loadAddr] dev] offset]"

);
看帮助提示很容易明白,nboot是uboot指令--将nand flash中的内容加载到sdram中,比如"nboot 0x30000000 0 0x60000\;bootm 
0x30000000是拷到的sdram的地址,0是nand flash设备号,0x60000是内核在nand flash的地址。再通过bootm从0x30000000启动内核。 
但是这里有个疑问,nboot怎么知道你内核的大小,需要拷贝多少内容? 
由于uImage的前64个字节是zImage的描述信息,所以do_nandboot能知道需要加载的kernel的size。
当然啦,开启nboot的使用,需要对uboot进行设置,否则,uboot无法跳转;


将nboot写入环境变量并自动开启跳转操作,如下图

 

二,根据外部GPIO状态,做内核跳转,按照上述对GPIO的设置有如下定义:
#define GPIO_PIN_DATA_BASE (0xB0004800ul)
#define GPIO_PIN_DATA(port, pin) (*((volatile uint32_t *)((GPIO_PIN_DATA_BASE+(0x40*(port))) + ((pin)<<2))))
// #define GPIO_PIN_DATA(port, pin) (*((volatile uint32_t *) ((GPIO_PIN_DATA_BASE+(0x40)))
#define sw1_USBA GPIO_PIN_DATA(0, 10 ) //PA10
#define sw1_USBB GPIO_PIN_DATA(0, 11 ) //PA11
#define sw_D7 GPIO_PIN_DATA(3, 7 ) //PA11
#define key0_A1 GPIO_PIN_DATA(0, 1 ) //PA11
在3秒自动跳转前判断GPIO 状态

 

 3s结束后;在从nandflash具体地址自动加载内核前;做判断

 其中,addr和offset大小由环境变量所设定:0xc00000@0xe00000(kernel_backup),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxilang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值