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

相关文章
|
5月前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
125 1
|
5月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
158 1
|
3月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
3月前
|
传感器 人工智能 网络协议
:嵌入式 Linux 及其用途
【8月更文挑战第24天】
164 0
|
4月前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
**嵌入式Linux学习误区摘要** 1. **过度聚焦桌面Linux** - 许多学习者误将大量时间用于精通桌面Linux系统(如RedHat、Fedora、Ubuntu),认为这是嵌入式Linux开发的基石。 - 实际上,桌面Linux仅作为开发工具和环境,目标不应是成为Linux服务器专家,而应专注于嵌入式开发工具和流程。 2. **盲目阅读Linux内核源码** - 初学者在不了解Linux基本知识时试图直接研读内核源码,这往往导致困惑和挫败感。 - 在具备一定嵌入式Linux开发经验后再有针对性地阅读源码,才能有效提升技能。
|
5月前
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
62 1
|
5月前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
48 1
|
9天前
|
缓存 监控 Linux
|
1天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
10 3
|
1天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
8 3