嵌入式Linux系列第18篇:一个网友的引脚使用问题

简介: 嵌入式Linux系列第18篇:一个网友的引脚使用问题

1.引言    

有个使用NUC972的网友遇到一个问题:他需要把PD7当做GPIO使用,但是在配置PD7为GPIO时提示:    Please Check GPIOD07's multi-function = 0x6       为了解决此问题,我花了一定时间,通过本篇文章把解决问题的方法记录下来,希望对大家也有所帮助。                              

2.环境介绍

2.1.硬件

1) 网上的一个第三方做的NUC972开发



2.2.软件

1) Uboot使用上一篇的,需要改动。

2) Kernel使用上一篇的,不需要改动。

3) Rootfs在上一篇基础上,不需要改动。

3.问题复现  

通过查看原理图我们可以看到PD0-PD6是用作了SD卡接口,PD7是没有使用的,所以理论上这个引脚肯定是可以当做普通GPIO引脚使用的。


 


先在我的板子上试试看。   PD7对应的GPIO编号为0x67,输入下面这条命令,果然提示同样的问题。  

echo 103 > /sys/class/gpio/export


4.解决方法  

第一步:使用devmem指令   底层开发过程中,经常需要在终端查看或者修改设备寄存器的值, devmem,可用于读取或者修改物理寄存器的值,非常方便Usage: devmem ADDRESS [WIDTH [VALUE]]    比如我们要读取下面地址的内容    读取:在地址0x97000000读取32bit值(WIDTH默认等于32, 可选值为[8, 16, 32, 64])    # devmem 0x97000000     # 0x11111111    读取:在地址0x97000000读取16bit值     # devmem 0x97000000 16     # 0x111

    通过阅读 NUC970_TechnicalReferenceManual_EN_Rev1.20.pdf文件



 

 我们知道GPIOD的地址为0xB0000088,我们使用 devmem 0xB0000088  读取该地址的值


 

可以看到值为0x66666666,对应PD7引脚它的功能被设置为6了。


 


一种解决方式是我们直接写寄存器:    devmem   0xB0000088  32 0x06666666 就可以了。    还有一种方法是在Uboot里修改:    /board/nuvoton/nuc970/nuc970.c    Board_mmc_init函数里,将下图红框中的0x66666666改为0x06666666.


 


重新编译烧录后,再使用echo 指令就不会再报错了。


5.结束语

   本期给大家介绍了一个实际GPIO问题的解决方法,重点是devmem指令的使用,同时第一次阅读芯片寄存器。

相关文章
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
494 1
|
11月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
611 15
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
548 13
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
864 3
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
224 4
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
670 0
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
259 1
|
消息中间件 缓存 Unix
[面试必备]嵌入式Linux内核开发必须了解的三十道题
[面试必备]嵌入式Linux内核开发必须了解的三十道题
|
Linux Go 人机交互
嵌入式linux之go语言开发(十三)LittlevGL,漂亮的嵌入式GUI的go语言绑定
嵌入式linux之go语言开发(十三)LittlevGL,漂亮的嵌入式GUI的go语言绑定
|
存储 XML JSON
嵌入式linux之go语言开发(十二)参数配置文件存储模块开发
嵌入式linux之go语言开发(十二)参数配置文件存储模块开发