2

我正在使用 Beaglebone Black,我想使用 mmc2 插槽。

根据 AM335xx TRM,beaglebone black 应该有 3 个可用的 mmc:mmc0(sd 卡);mmc1(2G 闪存),mmc2。

我正在尝试通过设备树启用 mmc2(并且我很确定拥有正确的引脚设置)但是,通过执行 dmesg 我获得:

/ocp/mmc@47810000: can't find DMA channel
 omap_hsmmc mmc.11: unable to obtain RX DMA engine channel 65

通过将示波器探头放在接头上(例如 mmc2 clk 信号),我看不到任何转换。我已经删除了 R 160 以使 mmc2 cmd 可访问,但我也没有看到任何过渡。

我尝试通过

 echo > /sys/devices/..../slots

并通过

  capemgr.enable_partno

没有成功:我可以看到它

/sys/devices/..../slots

(加载了 L 的含义)..但是无法在标题上看到任何信号。

我已经用谷歌搜索了它,但答案根本不清楚。有任何想法吗?

我的

 uname -a

是:

Linux beaglebone 3.8.13 #1 SMP Tue Jun 18 02:11:09 EDT 2013 armv7l GNU/Linux

谢谢你的帮助。

4

1 回答 1

3

您需要将 mmc2 DMA 事件配置到某些 DMA 通道,因为这些事件不是直接映射的。

我无法使用设备树覆盖成功地做到这一点。所以我直接对 am335-x-bone-common.dtsi 进行了更改(虽然不确定这是最好的方法):

&edma {
ti,edma-xbar-event-map = <32 12>,   /* gpevt2 -> 12 */
                         <30 20>,   /* xdma_event_intr2 -> 20 */
+                        <1  32>,
+                        <2  33>;   
};

在上面的示例中,事件 1 (SDTXEVT2) 映射到通道 32,事件 2 (SDRXEVT2) 映射到通道 33。

如果您想选择另一个打开的 DMA 通道检查表 11-23。直接映射和表 11-24。Crossbar 映射自技术参考手册 Rev J。

在您的设备树覆盖文件中,在 mmc3 节点中添加这些通道:

dmas = <&edma 32 
        &edma 33>;
dma-names = "tx", "rx";
于 2014-06-13T21:29:31.517 回答