嵌入式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指令的使用,同时第一次阅读芯片寄存器。

相关文章
|
2天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
35 13
|
6月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
190 1
|
4月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
128 3
|
4月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
217 0
|
5月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
|
6月前
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
79 1
|
6月前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
53 1
|
1月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
92 8
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
251 6
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
80 3