Update:
- This blog is useful for ARM microprocessors running Linux Kernel versions 4.1.2-ti-r4 to 4.4.0.
- It could still be relevant for earlier kernel releases but earlier releases have not been tested.
- If your ARM microprocessor is running kernel's 4.4.16-ti-rt and newer go to part II:
Interfacing a second SD card reader to the Beaglebone Black
- I could not find any tutorials or guides in forums on how to interface another SD card to the beaglebone black, so I thought I'd share and show you how I got mine up and running. I won't explain the device tree bindings in detail but you can use my solution as a reference.
MMC2 PINMUX CONFIGURATION:
Added in file: am335x-bone-common.dtsi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| mmc3_pins: pinmux_mmc3_pins {
pinctrl-single,pins = <
0x44 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a1.mmc2_dat0, INPUT_PULLUP | MODE3 */
0x48 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a2.mmc2_dat1, INPUT_PULLUP | MODE3 */
0x4C (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_a3.mmc2_dat2, INPUT_PULLUP | MODE3 */
0x78 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_ben1.mmc2_dat3, INPUT_PULLUP | MODE3 */
0x88 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_csn3.mmc2_cmd, INPUT_PULLUP | MODE3 */
0x8C (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_clk.mmc2_clk, INPUT_PULLUP | MODE3 */
0x40 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a0.gpio1_16 */
0x74 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* mmc2_sdcd, p9_13, Note: Dont know why but we set card detect pinout to be GPIO */
0x15c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mmc2_sdwp, p9_17, Note: Write protect is not configured in the device tree settings*/
>;
};
|
- Note that the mmc0, mmc1, and mmc2 lines on the beaglebone refer to mmc1, mmc2, and mmc3 in the device tree.
1
2
3
4
| 0x88 (PIN_INPUT_PULLUP | MUX_MODE3) /* gpmc_csn3.mmc2_cmd, INPUT_PULLUP | MODE3 */
...
...
0x40 (PIN_OUTPUT_PULLDOWN | MUX_MODE7) /* gpmc_a0.gpio1_16 */
|
- You can see that the two lines are connected:
MMC2 DEVICE TREE BINDINGS:
- Pinctrl-0 is set to mmc2's pinmux (mmc3_pins)
- cd-gpios (Card detect) is set to gpio0_31 and is active high,
i.e. gpio0_31 is high when SD card is inserted in the SD card reader.
Therefore, using the "cd-inverted" property means, that the CD line is
active high.
- Max-frequency is set to 25MB/s because of SD bus speed specifications.
- dmas parameters: <&edma 12 &edma 13>
- Here's the mmc device tree bindings documentation:
Added in file: am335x-bone-common.dtsi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| &mmc3 {
vmmc-supply = <&vmmcsd_fixed>;
ti,dual-volt;
ti,needs-special-reset;
ti,needs-special-hs-handling;
pinctrl-names = "default";
pinctrl-0 = <&mmc3_pins>;
cd-gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>;
cd-inverted;
bus-width = <4>;
max-frequency = <25000000>;
dmas = <&edma 12
&edma 13>;
dma-names = "tx", "rx";
status = "okay";
};
&edma {
ti,edma-xbar-event-map = /bits/ 16 <1 12
2 13>;
};
|