阅读 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 节“内存映射”)0x818
是conf_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 位。
引用文献:
[2] BeagleBone Black (Rev. A6) documentation (schematics, etc.)
关于linux-kernel - 编辑pad控制寄存器没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30293405/