am335x system upgrade kernel tf(五)

1      Scope of Document

This document describes TF hardware design

2      Requiremen

2.1     Function Requirement

 Enumerate tf card , support boot from tf and can mount in rootfs when nand boot.

2.2     Performance Requirement

Support common capacity tf card

3      Hardware Overview

tf interface,pin map:

// data signal

AM335X_MMC0_DAT3----------MMC0_DAT3

AM335X_MMC0_DAT2----------MMC0_DAT2

AM335X_MMC0_DAT1----------MMC0_DAT1

AM335X_MMC0_DAT0----------MMC0_DAT0

// clk/cmd signal

AM335X_MMC0_CLK-----------MMC0_CLK

AM335X_MMC0_CMD----------MMC0_CMD

// card detect signal

AM335X_MCASP0_ACLK-----MCASP0_ACLKR (gpio3_18)

 

                  Figure 1 tf interface block diagram

4      Functional Description

4.1     Functional Block Diagram

 

Figure 2  inter block diagram

                    

4.2     TF

4.2.1 Overview

 

AM335x has 3 instances MMC/SD/SDIO host controller, which provides an interface between microprocessor and either MMC, SD memory cards, or SDIO cards. 

The MMC/SD driver is implemented as a block driver on top of host controller as a HSMMC controller driver and supports SD, SD High Speed and SDHC cards. The driver only supports for 4 bit modes(no SPI mode, 1/8 Bit). Both DMA & polled mode of data transfer is supported.

5      Porting

5.1     Uboot porting

Index: u-boot-2018.01/include/configs/am335x_evm.h

===================================================================

--- am335x_evm.h     (revision 4)

+++ am335x_evm.h  (revision 5)

@@ -17,6 +17,7 @@

 #define __CONFIG_AM335X_EVM_H

 #include <configs/ti_am335x_common.h>

+#define CONFIG_SD_BOOT

 #ifndef CONFIG_SPL_BUILD

 # define CONFIG_TIMESTAMPKernel porting

Nand to do pin mux in board/ti/am335x/mux.c

configure_module_pin_mux(mmc0_pin_mux_sk_evm);

 

5.2     Kernel porting

Device Drivers --->

       <*> MMC/SD/SDIO card support --->

              <*> MMC block device driver

              <*> TI OMAP High Speed Multimedia Card Interface support

<M> MMC/SD/SDIO card support --->
<M> MMC block device driver
<M> TI OMAP High Speed Multimedia Card Interface support

Dts file change:

        regulators {

                compatible = "simple-bus";

                vcc3v3: fixedregulator1 {

                        compatible = "regulator-fixed";

                        regulator-name = "vcc3v3";

                        regulator-min-microvolt = <3300000>;

                        regulator-max-microvolt = <3300000>;

                        regulator-boot-on;

                };

        };

        mmc1_pins: pinmux_mmc1_pins {

                pinctrl-single,pins = <

                        AM33XX_IOPAD(0x8fc, PIN_INPUT_PULLUP | MUX_MODE0)       /* mmc0_dat0.mmc0_dat0 */

                        AM33XX_IOPAD(0x8f8, PIN_INPUT_PULLUP | MUX_MODE0)       /* mmc0_dat1.mmc0_dat1 */

                        AM33XX_IOPAD(0x8f4, PIN_INPUT_PULLUP | MUX_MODE0)       /* mmc0_dat2.mmc0_dat2 */

                        AM33XX_IOPAD(0x8f0, PIN_INPUT_PULLUP | MUX_MODE0)       /* mmc0_dat3.mmc0_dat3 */

                        AM33XX_IOPAD(0x904, PIN_INPUT_PULLUP | MUX_MODE0)       /* mmc0_cmd.mmc0_cmd */

                        AM33XX_IOPAD(0x900, PIN_INPUT_PULLUP | MUX_MODE0)       /* mmc0_clk.mmc0_clk */

                        AM33XX_IOPAD(0x9a0, PIN_INPUT_PULLUP | MUX_MODE7)       /* mcasp0_aclkr.mmc0_sdwp */

                >;

        };

&mmc1 {

        status = "okay";

        /*vmmc-supply = <&vmmc_reg>;*/

        vmmc-supply = <&vcc3v3>;

        bus-width = <4>;

        pinctrl-names = "default";

        pinctrl-0 = <&mmc1_pins>;

        cd-gpios = <&gpio3 18 GPIO_ACTIVE_LOW>;

};

[    1.272256] omap_hsmmc 48060000.mmc: using lookup tables for GPIO lookup

[    1.272266] omap_hsmmc 48060000.mmc: lookup for GPIO wp failed

[    1.513463] mmc0: host does not support reading read-only switch, assuming write-enable

[    1.532796] mmc0: new high speed SDHC card at address 0007

[    1.542753] mmcblk0: mmc0:0007 SD16G 14.5 GiB

[    1.554116]  mmcblk0: p1

6      Follow-up

We can do some optimize: for example fs check function

Manual fs check :

root@am335x-evm:~# fsck /dev/mmcblk0p1

fsck from util-linux 2.30

CP437: Invalid argument

fsck.fat 4.1 (2017-01-24)

0x41: Dirty bit is set. Fs was not properly unmounted and some data may be corrupt.

1) Remove dirty bit

2) No action

? 1

Perform changes ? (y/n) y

/dev/mmcblk0p1: 10 files, 35768/1901241 clusters

Auto fs check:

root@am335x-evm:/etc# vi   /etc/fstab

# stock fstab - you probably want to override this with a machine specific one

/dev/root            /                    auto       defaults              1  1

proc                 /proc                proc       defaults              0  0

devpts               /dev/pts             devpts     mode=0620,gid=5       0  0

usbdevfs             /proc/bus/usb        usbdevfs   noauto                0  0

tmpfs                /run                 tmpfs      mode=0755,nodev,nosuid,strictatime 0  0

tmpfs                /var/volatile        tmpfs      defaults,size=50M     0  0

tmpfs                /media/ram           tmpfs      defaults,size=16M     0  0

# uncomment this if your device has a SD/MMC/Transflash slot

/dev/mmcblk0p1       /media/card          auto       defaults,sync,noauto  0  1

原文地址:https://www.cnblogs.com/lianghong881018/p/10008803.html