工具/软件:
您好:
我尝试使用默认的 GPMC 驱动程序 (OMAP-LGPMC.c)、以便将某些硬件连接到 GPMC。 据我所知、OMAP-LGPMC 驱动程序在某种程度上专用于连接 NAND 或 NOR 闪存等内容、这不是我要做的。 但是、OMAP-LGPMC 驱动程序似乎是一个非常好的起点、我将尝试利用这里的大多数默认功能。
现在、我很难将地址窗口分配给各个 ChipSelects。
器件树文件中的条目如下所示:
&gpmc0{
pinctrl-names =“default";“;
pinctrl-0 =<&gpmc0_pins_default>;
Assigned-clocks =<&K3_CLKS 80 0>;
assigned-clock-parter =<&k3_CLKS 80 1>;
分配的时钟速率=<66666667>;
//assigned-clock-rates =<100000>;
GPMC、num-cs =<4>;
RANGE =<0 0x00 0x50000000 0x01000000>、/* CS0 空格。 最小分区= 16MB */
<1 0 0x00 0x51000000 0x010000000>、/* CS1 空间。 最小分区= 16MB */
<2 0 0x00 0x52000000 0x01000000>、/* CS2 空间。 最小分区= 16MB */
<3 0 0x00 0x53000000 0x010000000>;/* CS3 空间。 最小分区= 16MB */
状态=“正常“;
};
因此有 4 个窗口、每个窗口大小为 16MiB、从给定的地址(当然是在 GPMC 数据窗口内)开始分配给 ChipSelects 0、1、2 和 3。
我不确定是否需要这一点、但我还添加了该行 gpmc、num-cs =<4>;以表明有四个可用的 ChipSelects。
构建器件树 (make linux-dtbs) 并使用其引导时、dmesg | grep GPMC 会显示以下内容:
[ 1.154690] OMAP-LGPMC 3b000000.memory-controller:GPMC 修订版 6.0
[ 1.161173] GPMC_mem_init:禁用在 0x0-0x1000000 映射的 CS 0
第一行正常、表明 OMAP-LGPMC 正在运行、而第二行对我来说很有问题。
首先、为什么它在写入时会禁用 CS 0? 其次、0x0-0x1000000 表示什么 — 它应该报告 0x51000000-0x51000000? 第三、剩下的三个 ChipSelects 呢?
还有一个问题是,每个范围条目中的第三个条目实际上意味着什么。 我查看了有关 OMAP-LGPMC 的器件树设置的 Linux 文档、该文档也在以下位置提供:
www.kernel.org/.../omap-gpmc.txt
根据该文档、范围元组必须具有以下形式:
0
尝试使用该格式时、我会在器件树编译期间收到警告。
我上面使用的格式与这个附加 0x00 参数一起实际从默认器件树文件复制而来、其中存在一个 ChipSelect 分配、如下所示:
RANGE =<0 0x00 0x51000000 0x01000000>;/* CS0 空间。 最小分区= 16MB */
顺便说一下、此默认设置还显示我禁用 cs 0...
我还没有深入研究 OMAP-LGPMC.c、以便可能了解所发生的情况。 也许这里有一些简单的解决方案。 一般来说、似乎很难找到有关 GPMC 模块的一些示例文档。
感谢您的见解、
Mario