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

相关文章
|
7天前
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
20 1
|
7天前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
25 1
|
7天前
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
8 1
|
7天前
|
存储 缓存 Unix
【嵌入式软件工程师面经】Linux文件IO
【嵌入式软件工程师面经】Linux文件IO
12 1
|
9天前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
12 4
|
30天前
|
Linux 芯片 Ubuntu
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
Linux驱动入门 —— 利用引脚号操作GPIO进行LED点灯
|
30天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
16 0
|
30天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
1天前
|
Linux Shell 程序员
【Linux操作系统】命令的运行原理
【Linux操作系统】命令的运行原理
|
1天前
|
Linux
linux命令【JavaPub版】
linux命令【JavaPub版】
7 0