linux-kernel - 编辑pad控制寄存器没有效果

标签 linux-kernel beagleboneblack

阅读 AM3359 技术引用手册后,我发现您可以编辑焊盘控制寄存器(Pin Mux)。我尝试使用 devmem2 编辑这些寄存器,它表示已成功写入,但再次读取该值时,它是完全相同的。

我使用命令sudo devmem2 0x44E10818 w 0x7并返回

Value at address 0x44E10818 (0xb6f2c818): 0x31
Written 0x7; readback 0x7

但后来我又读了一遍,它说该值是:0x31。 我所能想到的是,也许 Linux 内核中有一些底层的东西正在设置这些值。是什么导致引脚复用器保持其值?

最佳答案

来自AM335x TRM我可以看到:

  • 0x44E10000 是控制模块寄存器组的地址(来自第 2 节“内存映射”)
  • 0x818conf_gpmc_ad6(来自第 9 节“控制模块”)

来自AM335x datasheet我看到:

  • GPMC_AD6 焊盘是 R9 球(适用于 BBB 上的 ZCZ SoC)

来自BBB Rev. A6 schematics我看到:

  • R9 球已连接到 MMC1_DAT6 线
  • MMC1_DAT6线已连接至eMMC闪存

从你的问题(使用 TRM)我可以得出这样的结论:

  • 默认情况下,此引脚在 mmc1_dat6 模式下复用
  • 您正在尝试将其重新复用为 gpio1_6 模式

因此,根据这次调查,我可以说您不应该重新复用该引脚(即使可能),因为需要将其复用为 mmc1_dat6 才能从您的 SoC 访问 eMMC。

如果您确实需要将其复用为 gpio1_6,请务必先在设备树文件中更改它的复用模式(并将 BBB 上的 dtb 文件替换为新的一)。在这种情况下,您将无法使用 8-bit mode对于您的 eMMC,因此您可能还需要在设备树文件中将此模式更改为 4 位。


引用文献:

[1] AM3359 SoC documentation

[2] BeagleBone Black (Rev. A6) documentation (schematics, etc.)

关于linux-kernel - 编辑pad控制寄存器没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293405/

相关文章:

linux - 为什么 Linux 允许线程设置调度策略和优先级?

c - 通过pid查找task_struct的有效方法

c++ - 来自 Windows 的交叉编译 GNU ARM (BeagleBoneBlack)。 *.elf : "No such file or directory" 上的运行时错误

linux - Beaglebone Black ubuntu 编译驱动

linux - 中断驱动的 SPI 或 I2C 驱动程序

linux - PTE 和结构页面的详细信息

linux - 是否可以在 Linux 内核上设置基于角色的安全文件系统

c - 进程上下文和定时器函数之间的同步

beagleboneblack - 与 opkg 进行包同步

c++ - 用于访问 BeagleBone Black 的库(3.8 Kerne - Angstrom)