涉硬参数调整指南
1. 概述¶
本文主要描述模拟IP和数字接口涉硬参数调试方法。
2. 模拟IP涉硬参数调试步骤¶
2.1. USB 2.0¶
USB 2.0 IP提供了三个关于驱动能力的参数可以调节,分别为:Main Current(TX Swing)、De-emphasis以及CM Current。针对device mode和host mode均提供了用于debug和用于参数固化的方法来调节涉硬参数。
2.1.1. 通过dts配置默认值¶
驱动能力调节参数首先在DTS里设置了默认值,默认值为:对于USB2.0 device mode 参数默认值为:tx-swing=110%,de-emphasis=105%,cm-current=120%。对于USB2.0 host0 mode,host1 mode(分别对应PORT0,PORT1)参数默认值为:tx-swing=105%,de-emphasis=105%,cm-current=120%
1. Sstar-udc {
2. compatible = "sstar, msb250x-udc";
3. interrupts = <GIC_SPI INT_IRQ_OTG IRQ_TYPE_LEVEL_HIGH>;
4. tx-swing,de-emphasis,cm-current = <110>, <105>, <120>
5. status = "ok";
6. };
7.
8. sstar_u2ph1: u2phy1 {
9. syscon-utmi = <&usb2phy1_utmi>;
10. syscon-uhc = <&usb2phy1_uhc>;
11. syscon-usbc = <&usb2phy1_usbc>;
12. syscon-bc = <&usb2phy1_bc>;
13. syscon-utmi2 = <&usb2phy1_utmi2>;
14. tx-swing,de-emphasis,cm-current = <105>, <105>, <120>;
15. otp_usb_phy_trim_offset = <0x0 0x44>;
16. #phy-cells = <0>;
17. status = "ok";
18. };
19.
20. sstar_u2ph2: u2phy2 {
21. syscon-utmi = <&usb2phy2_utmi>;
22. syscon-uhc = <&usb2phy2_uhc>;
23. syscon-usbc = <&usb2phy2_usbc>;
24. syscon-bc = <&usb2phy2_bc>;
25. tx-swing,de-emphasis,cm-current = <105>, <105>, <120>;
26. otp_usb_phy_trim_offset = <0x0 0x45>;
27. #phy-cells = <0>;
28. status = "ok";
29. };
2.1.2. 通过insmod参数配置涉硬参数¶
驱动能力调节参数也支持在添加模块KO时通过加参数来配置。对于device和host操作如下所示,注意此方法要求相关模块编译成KO,注意加载顺序,对于host mode参数值会在ehci-hcd.ko起来后设置进去。对于device mode参数值会在udc-msb250x.ko安装时生效。
1. insmod /config/modules/5.10/udc-msb250x.ko tx_swing=115 dem_cur=105 cm_cur=120 2. insmod /config/modules/5.10/phy-sstar-u2phy.ko tx_swing=115 dem_cur=105 cm_cur=120
2.1.3. 通过命令行调整Main Current¶
Main Current总共有8个档位可以调整:80%、88%、90%、95%、100%、105%、110%、115%,默认值为115%。对应的寄存器及设定值为:
| Register Name | Bank | Offset | Value |
|---|---|---|---|
| HS_TX_TEST_L[6:4] | 0x1421 | 0x16 | 0x0 : 100% 0x1 : 105% 0x2 : 110% 0x3 : 115%(default) 0x4 : 80% 0x5 : 85% 0x6 : 90% 0x7 : 95% |
命令行调整Main Current方法:
-
查看当前TX Swing value命令:从上到下分别对应device、host0、host1 mode命令
1. # cat /sys/devices/soc0/soc/soc\:Sstar-udc/tx_swing 2. # cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/tx_swing 3. # cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/tx_swing
-
设置TX Swing value命令:从上到下分别对应device、host0、host1 mode命令
1. # echo value > /sys/devices/soc0/soc/soc\:Sstar-udc/tx_swing 2. # echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/tx_swing 3. # echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/tx_swing
其中 value 的值为上表中的对应的值,不包含百分号,如将TX Swing设置为100%,device、host0、host1 mode命令如下: 1. # echo 100 > /sys/devices/soc0/soc/soc\:Sstar-udc/tx_swing 2. # echo 100 > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/tx_swing 3. # echo 100 > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/tx_swing
2.1.4. 通过命令行调整De-emphasis Current¶
De-emphasis Current总共有5个档位可以调整,分别为:100%、105%、110%、115%、120%,默认值为105%。对应的寄存器及设定值为:
| Register Name | Bank | Offset | Value |
|---|---|---|---|
| HS_TX_TEST_L[9:7] | 0x1421 | 0x16 | 0x0 : 100% 0x1 : 100% 0x2 : 100% 0x3 : 100% 0x4 : 105%(default) 0x5 : 110% 0x6 : 115% 0x7 : 120% |
命令行调整De-emphasis Current方法:
-
查看当前De-emphasis Current命令:从上到下分别对应device、host0、host1 mode命令
1. # cat /sys/devices/soc0/soc/soc\:Sstar-udc/de_emphasis_current 2. # cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/de_emphasis_current 3. # cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/de_emphasis_current
-
设置De-emphasis Current命令:从上到下分别对应device、host0、host1 mode命令
1. # echo value > /sys/devices/soc0/soc/soc\:Sstar-udc/de_emphasis_current 2. # echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/de_emphasis_current 3. # echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/de_emphasis_current
其中 value 的值为上表中的对应的值,不包含百分号,如将De-emphasis Current设置为100%,device、host0、host1 mode命令如下: 1. # echo 100 > /sys/devices/soc0/soc/soc\:Sstar-udc/ de_emphasis_current 2. # echo 100 > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/de_emphasis_current 3. # echo 100 > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/de_emphasis_current
2.1.5. 通过命令行调整CM Current¶
CM Current总共有6个档位可以调整,分别为:105%、110%、115%、120%、125%、130%,默认值为110%。对应的寄存器及设定值为:
| Register Name | Bank | Offset | Value |
|---|---|---|---|
| HS_TX_TEST_H[5:3] | 0x1421 | 0x17 | 0x0 : 120% 0x1 : 115% 0x2 : 110%(default) 0x3 : 105% 0x4 : 130% 0x5 : 125% 0x6 : 120% 0x7 : 115% |
命令行调整CM Current方法:
-
查看当前CM Current命令:从上到下分别对应device、host0、host1 mode命令
1. # cat /sys/devices/soc0/soc/soc\:Sstar-udc/cm_current 2. # cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/cm_current 3. # cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/cm_current
-
设置CM Current命令:从上到下分别对应device、host0、host1 mode命令
1. # echo value > /sys/devices/soc0/soc/soc\:Sstar-udc/cm_current 2. # echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/cm_current 3. # echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/cm_current
其中 value 的值为上表中的对应的值,不包含百分号,如将CM Current设置为120%,device、host0、host1 mode命令如下: 1. # echo 120 > /sys/devices/soc0/soc/soc\:Sstar-udc/cm_current 2. # echo 120 > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.2/cm_current 3. # echo 120 > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.3/cm_current
2.2. USB 3.0¶
由于USB 3.0同时包含3.0和2.0信号线,因此分别针对3.0和2.0信号提供了六个驱动能力的参数可以调节。参数对应的register位置如下表所示。注意USB3.0 device mode和host mode都共用一个usb3-phy.ko,因此USB3.0对于驱动能力参数的调整方法不区分device mode和host mode。
| Parameter Name | Bank | Offset | Bits |
|---|---|---|---|
| idrv | 0x1529 | 0x41 | [7:2] |
| idem | 0x1529 | 0x41 | [13:8] |
| ibiasi | 0x1529 | 0x26 | [3:1] |
| tx_swing | 0x1437 | 0x16 | [6:4] |
| de_emphasis | 0x1437 | 0x16 | [9:7] |
| cm_current | 0x1437 | 0x17 | [5:3] |
其中参数idrv、idem以及ibiasi对应3.0信号部分的驱动能力调节,参数tx_swing,de_emphasis,cm_current则对应2.0信号部分的驱动能力调节。USB 3.0信号的驱动能力参数的调整一共有21种组合。具体组合如下表所示:
| Index | level | vppdiff | De-emphasis(dB) | idrv | idem | ibiasi |
|---|---|---|---|---|---|---|
| h41[7:2] | h40[13:8] | h26[3:1] | ||||
| 0 | 0 | 0.9 | -3.50 | 101000 | 001111 | 110 |
| 1 | 1 | 1.0 | -3.50 | 101011 | 010000 | 110 |
| 2 | 2 | 1.1 | -3.50 | 101111 | 010010 | 110 |
| 3 | 3 | 1.2 | -3.50 | 110011 | 010100 | 110 |
| 4 | 4 | 1.3 | -3.50 | 110111 | 010101 | 111 |
| 5 | 5 | 1.4 | -3.50 | 111100 | 010111 | 111 |
| 6 | 6 | 1.5 | -3.50 | 111111 | 011010 | 111 |
| 7 | 0 | 0.9 | -4.50 | 100100 | 011101 | 110 |
| 8 | 1 | 1.0 | -4.50 | 101000 | 100000 | 110 |
| 9 | 2 | 1.1 | -4.50 | 101011 | 100011 | 110 |
| 10 | 3 | 1.2 | -4.50 | 101111 | 100110 | 110 |
| 11 | 4 | 1.3 | -4.50 | 110011 | 101010 | 111 |
| 12 | 5 | 1.4 | -4.50 | 110111 | 101101 | 111 |
| 13 | 6 | 1.5 | -4.50 | 111100 | 110000 | 111 |
| 14 | 0 | 0.9 | -6.0 | 100001 | 010100 | 110 |
| 15 | 1 | 1.0 | -6.0 | 100101 | 010110 | 110 |
| 16 | 2 | 1.1 | -6.0 | 101001 | 011001 | 110 |
| 17 | 3 | 1.2 | -6.0 | 101101 | 011011 | 110 |
| 18 | 4 | 1.3 | -6.0 | 110000 | 011110 | 111 |
| 19 | 5 | 1.4 | -6.0 | 110100 | 100011 | 111 |
| 20 | 6 | 1.5 | -6.0 | 101101 | 100101 | 111 |
2.2.1. 通过dts设置默认值¶
驱动能力调节参数首先在DTS里设置了默认值,如下:
1. u3phy: usb3-phy {
2. compatible = "sstar, mercury6p-u3phy";
3. #address-cells = <1>;
4. #size-cells = <1>;
5. ranges;
6. status = "ok";
7.
8. u3phy_utmi: utmi@1f286e00 {
9. compatible = "sstar, mercury6p-utmi";
10. reg = <0x1f286e00 0x200>;
11. clocks = <&usbpll>;
12. sstar,tx-swing-and-de-emphasis = <0x0>, <0x5>, <0x2>;
13. #phy-cells = <0>;
14. status = "ok";
15. };
16.
17. u3phy_pipe: pipe@1f2a5200 {
18. compatible = "sstar, mercury6p-pipe";
19. reg = <0x1f2a5200 0x800>;
20. clocks = <&CLK_ssusb_phy_108>, <&CLK_ssusb_phy_432>;
21. sstar,otp-syscon = <&otp_syscon>;
22. sstar,tx-swing-and-de-emphasis = <0x3f>, <0x1a>, <0x07>;
23. #phy-cells = <0>;
24. status = "ok";
25. };
26. };
其中,dts中u3phy_pipe节点的sstar,tx-swing-and-de-emphasis = <0x32>,<0x28>,<0x0d>代表USB3.0信号的参数调节:idrv = 0x32,idem = 0x28,ibiasi = 0x0d。
dts中的u3phy_utmi节点的sstar,tx-swing-and-de-emphasis = <0x03>,<0x07>,<0x02>则对应USB3.0内的2.0信号部分的参数调节:对应为 tx_swing = 0x0,de-emphasis_current = 0x5,cm_current = 0x2。
2.2.2. 通过insmod参数设置¶
驱动能力调节参数也支持在添加模块KO时通过加参数来配置。操作如下所示,注意此方法要求相关模块编译成KO,注意加载顺序。对于host mode参数值会在sstar-dwc3-of-simple.ko起来后设置进去。
# insmod /config/modules/5.10/usb3-phy.ko tx_idrv=0x37 tx_idem=0x15 tx_biasi=0x7 tx_swing=0x6 dem_cur=0x6 cm_cur=0x2
2.2.3. 通过命令行调整参数¶
kernel起来后可以通过命令行下执行方式动态调整idrv,idem,ibiasi,tx_swing,de_emphasis,cm_current。
对于USB3.0的信号部分的调整操作如下(注意value为16进制数):
1. # echo value > /sys/kernel/debug/usb/phy-soc:usb3-phy.3/tx-idrv 2. # echo value > /sys/kernel/debug/usb/phy-soc:usb3-phy.3/tx-idem 3. # echo value > /sys/kernel/debug/usb/phy-soc:usb3-phy.3/tx-biasi
对于USB2.0的信号部分的调整操作如下:
1. # echo value > /sys/kernel/debug/usb/phy-soc:usb3-phy.2/tx_swing 2. # echo value > /sys/kernel/debug/usb/phy-soc:usb3-phy.2/de_emphasis_current 3. # echo value > /sys/kernel/debug/usb/phy-soc:usb3-phy.2/cm_current
2.2.4. 通过riu 命令设置参数¶
Kernel下也可以利用riu_r,riu_w命令直接修改寄存器的方式调节驱动能力:kernel起来后可以通过命令行下执行如下命令进行动态调整,value,bank以及offset设置参考2.2中的表格。
1. # riu_r bank offset 2. # riu_w bank offset value
2.3. GMAC¶
GMAC为1000M Ethernet,目前提供了TX方向的驱动能力调整,涉及的信号包括:
| ID | Pin Name |
|---|---|
| 0 | MDC |
| 1 | MDIO |
| 2 | RGMII_TX_CLK |
| 3 | RGMII_TX_D0 |
| 4 | RGMII_TX_D1 |
| 5 | RGMII_TX_D2 |
| 6 | RGMII_TX_D3 |
| 7 | RGMII_TX_CTL |
GMAC共有16个档位可调:
| Level Name | Level Value | Driving (mA) |
|---|---|---|
| Level_0 | 0 | 4.4 |
| Level_1 | 1 | 6.5 |
| Level_2 | 2 | 8.7 |
| Level_3 | 3 | 10.9 |
| Level_4 | 4 | 13.0 |
| Level_5 | 5 | 15.2 |
| Level_6 | 6 | 17.4 |
| Level_7 | 7 | 19.5 |
| Level_8 | 8 | 21.7 |
| Level_9 | 9 | 23.9 |
| Level_10 | 10 | 26.0 |
| Level_11 | 11 | 28.2 |
| Level_12 | 12 | 30.3 |
| Level_13 | 13 | 32.5 |
| Level_14 | 14 | 34.6 |
| Level_15 | 15 | 36.8 |
列出当前各个IO的档位设定:
# cat /proc/gmac_0/driving gmac0 driving: MDC = 7 MDIO = 7 RGMII_TX_CLK = 7 RGMII_TX_D0 = 7 RGMII_TX_D1 = 7 RGMII_TX_D2 = 7 RGMII_TX_D3 = 7 RGMII_TX_CTL = 7
调节驱动能力等级:
1. echo [Pin ID] [Level Value] > /proc/gmac_0/driving 2. # [Pin ID]:上述的Pin脚ID 3. # [Level Value]:上述表格中描述的驱动能力等级
以下是一些示例:
4. # echo 1 6 > /proc/gmac_0/driving //调整MDIO驱动能力等级为6 5. # echo 3 9 > /proc/gmac_0/driving //调整RGMII_TX_D0驱动能力等级为9 6. # echo 7 15 > /proc/gmac_0/driving //调整RGMII_TX_CTL驱动能力等级为15
上述只以第一个GMAC作为说明,实际上GMAC支持多个网口,若有使用到,则调整驱动能力时把上述的"gmac_0"换成其它的(例如"gmac_1")就可以调整对应的GMAC Driving。
2.4. SATA展频(SSC)¶
展频(SSC)功能只有一档,无法动态调整。可以通过对应平台DTS文件中,SATA节点中的ssc_mode属性选择开关展频功能,ssc_mode属性支持的值为:
| Property Name | Value | Comment |
|---|---|---|
| ssc_mode | 0 | 关闭展频功能(默认) |
| 1 | 开启展频功能 |
开启展频功能如下所示:
1. sata {
2. compatible = "sstar,sata", "sstar,sata-ahci";
3. reg-names = "ahci", "ahci_port0", "ahci_misc";
4. reg = <0x1F346800 0x100>, <0x1F346900 0x100>, <0x1F287400 0x200>;
5. interrupts=<GIC_SPI INT_IRQ_SATA IRQ_TYPE_LEVEL_HIGH>;
6. clocks = <&CLK_sata_axi>,<&CLK_sata_pm>,<&CLK_sata_phy_108>,<&CLK_sata_phy_432>;
7. #ifdef CONFIG_CAM_CLK
8. camclk = <CAMCLK_sata_axi CAMCLK_sata_pm CAMCLK_sata_phy_108 CAMCLK_sata_phy_432 >;
9. #endif
10. phy_mode = <2>;
11. phy_setting = <0x4200>;
12. ssc_mode = <1>;
13. };
修改DTS后,需要重新编译替换Kernel Image并重新替换升级至开发板。
2.5. HDMI¶

HDMI的主要参数:
| Property Name | Range | Comment |
|---|---|---|
| Tap1Ch0 | 0x0-0x3F | 参考图示 |
| Tap1Ch1 | 0x0-0x3F | 参考图示 |
| Tap1Ch2 | 0x0-0x3F | 参考图示 |
| Tap1Ch3 | 0x0-0x3F | 参考图示 |
| Tap2Ch0 | 0x0-0x3F | 参考图示 |
| Tap2Ch1 | 0x0-0x3F | 参考图示 |
| Tap2Ch2 | 0x0-0x3F | 参考图示 |
| Tap2Ch3 | 0x0-0x3F | 参考图示 |
| RetrmCh | 0x0-0xF | 参考图示 |
| PreDrvCh | 0x0-0xF | 参考图示 |
| MuCh | 0x0-0xF | 参考图示 |
调整以上几个参数的命令为:(Tap1Ch0,Tap1Ch1等分别取表格里面对应Range的值)
# echo Tap1Ch0 Tap1Ch1 Tap1Ch2 Tap1Ch3 Tap2Ch0 Tap2Ch1 Tap2Ch2 Tap2Ch3 RetrmCh PreDrvCh MuCh > /sys/class/mstar/mhdmitx/drvcurcfg
查看当前设置的参数命令为:
# cat /sys/class/mstar/mhdmitx/drvcurcfg
3. GPIO驱动能力调整¶
3.1. 使用背景¶
由于 Linux GPIO lib 不支持 GPIO 上下拉及驱动能力的接口,所以导致我司的 GPIO Hal 层驱动缺少对 GPIO 上下拉和驱动能力设置的支持。然而在日常使用中,GPIO 的上下拉及驱动能力经常需要动态调整,所以增加上下拉及驱动能力设置 API 和用户层接口变得十分必要。
3.2. 内核接口¶
3.2.1. MDrv_GPIO_Pull_Up¶
-
目的
开启指定的 GPIO 上拉功能
-
语法
U8 MDrv_GPIO_Pull_Up(U8 u8IndexGPIO)
-
参数
Parameter Commemt u8IndexGPIO Gpio num -
返回值
Return Value Commemt 0 设置成功 1 引脚不支持上下拉设置或者输入参数错误
3.2.2. MDrv_GPIO_Pull_Down¶
-
目的
开启指定的 GPIO 下拉功能
-
语法
U8 MDrv_GPIO_Pull_Down(U8 u8IndexGPIO)
-
参数
Parameter Commemt u8IndexGPIO Gpio num -
返回值
Return Value Commemt 0 设置成功 1 引脚不支持上下拉设置或者输入参数错误
3.2.3. MDrv_GPIO_Pull_Off¶
-
目的
关闭指定的 GPIO 上/下拉功能,该 GPIO 切换至悬空态
-
语法
U8 MDrv_GPIO_Pull_Off(U8 u8IndexGPIO)
-
参数
Parameter Commemt u8IndexGPIO Gpio num -
返回值
Return Value Commemt 0 设置成功 1 引脚不支持上下拉设置或者输入参数错误
3.2.4. MDrv_GPIO_Pull_Status¶
-
目的
获取指定的 GPIO 上/下拉状态
-
语法
U8 MDrv_GPIO_Pull_Status(U8 u8IndexGPIO, U8* u8PullStatus)
-
参数
Parameter Commemt u8IndexGPIO Gpio num 8PullStatus Pull Status -
返回值
Return Value Commemt 0 获取成功 1 引脚不支持上下拉设置或者输入参数错误
3.2.5. MDrv_GPIO_Drv_Set¶
-
目的
设置指定的 GPIO 的驱动能力
-
语法
U8 MDrv_GPIO_Drv_Set(U8 u8IndexGPIO, U8 u8Level)
-
参数
Parameter Commemt u8IndexGPIO Gpio num u8Level 驱动能力等级,目前支持的驱动能力等级如下: Value Level 0 2mA/4mA/8mA 1 4mA/8mA/12mA 2 6mA/12mA/15mA 3 8mA/16mA/18mA 4 10mA/22mA 5 12mA/25mA 6 14mA/28mA 7 16mA/32mA -
返回值
Return Value Commemt 0 设置成功 1 引脚不支持驱动电流设置或者输入参数错误
3.2.6. MDrv_GPIO_Drv_Get¶
-
目的
设置指定的 GPIO 的驱动能力
-
语法
U8 MDrv_GPIO_Drv_Get(U8 u8IndexGPIO, U8\* u8Level)
-
参数
Parameter Commemt u8IndexGPIO Gpio num u8Level 驱动能力等级,目前支持的驱动能力等级如下: Value Level 0 2mA/4mA/8mA 1 4mA/8mA/12mA 2 6mA/12mA/15mA 3 8mA/16mA/18mA 4 10mA/22mA 5 12mA/25mA 6 14mA/28mA 7 16mA/32mA -
返回值
Return Value Commemt 0 获取成功 1 引脚不支持驱动电流设置或者输入参数错误
3.3. 用户层调试方法¶
3.3.1. 开启功能¶
要使用用户层接口需要在Linux kernel的配置打开 CONFIG_MSYS_GPIO选项,该配置位于:
Device Drivers -->
SStar SoC platform drivers -->
msys api -->
support GPIO pull and driving modify

3.3.2. 使用功能¶
-
设置上/下拉之前需要将 GPIO 设置为输入状态,输出状态下上下拉是没办法测量的:
1. # cd /sys/class/gpio 2. # echo gpio_index > export 3. # echo in > gpio gpio_index/direction
查看当前的状态:
1. # cd /sys/class/mstar/msys 2. # echo gpio_index/gpio_name > gpio_pull 3. # cat gpio_pull
设置上拉、下拉或者悬空:
1. # cd sys/class/mstar/msys 2. # echo gpio_index/gpio_name down/up/off > gpio_pull
查看设置后的状态:
1. # cd sys/class/mstar/msys 2. # cat gpio_pull
以PAD_UART_TX2为例,设置为输入:
1. # cd /sys/class/gpio 2. # echo 1 > export 3. # echo in > gpio1/direction
查看当前状态:
1. # cd sys/class/mstar/msys 2. # echo 1 > gpio_pull 3. # echo PAD_UART_TX2 > gpio_pull //the same to above 4. # cat gpio_pull
设置为上拉:
1. # cd sys/class/mstar/msys 2. # echo 1 up > gpio_pull 3. # echo PAD_UART_TX2 up > gpio_pull //the same to above
设置为下拉:
1. # cd sys/class/mstar/msys 2. # echo 1 down > gpio_pull 3. # echo PAD_UART_TX2 down > gpio_pull //the same to above
设置为悬空:
1. # cd sys/class/mstar/msys 2. # echo 1 off > gpio_pull 3. # echo PAD_UART_TX2 off > gpio_pull //the same to above
查看设置后的状态:
1. # cd sys/class/mstar/msys 2. # cat gpio_pull
-
设置驱动能力之前需要将 GPIO 设置为输出高电平状态方便测量:
1. # cd /sys/class/gpio 2. # echo gpio_index > export 3. # echo high > gpio gpio_index/direction
查看当前的驱动能力等级:
1. # cd sys/class/mstar/msys 2. # echo gpio_index/gpio_name > gpio_drive 3. # cat gpio_drive
调节驱动能力:
1. # cd sys/class/mstar/msys 2. # echo gpio_index/gpio_name level_num > gpio_drive
以PAD_UART_TX2设置为8mA为例:
1. # cd /sys/class/gpio 2. # echo 1 > export 3. # echo high > gpio1 /direction 4. # cd sys/class/mstar/msys 5. # echo 1 1 > gpio_drive 6. # echo PAD_UART_TX2 1 > gpio_drive //the same to above
每次执行echo指令后,可以通过cat同一个文件确定上一条echo命令的状态。GPIO Index 、GPIO Name和Level_Num可以参考 Software_Padmux_Table.xls
4. SD/EMMC驱动能力配置¶
4.1. 概述¶
芯片支持2组mmc设备,分别命名为SD0, FCIE。其中SD0支持SD3.0 spec且支持SD boot, FCIE支持8bit mode且支持EMMC 4/8bit boot。这2组mmc均只有一种padmux mode,具体可参考相关的GPIO PAD配置文档。
4.1.1. SD driving寄存器¶
SD0使用SD专用PAD,驱动能力由DS2~DS0寄存器的对应bit位构成的DS[2:0] 3个参数共同决定。每个DS寄存器都有bit[8:0]共9个bit,每个bit都对应着SD3.0 PAD组里面的某个pin脚。例如,DS3~D0的bit0组成DS_bit0[3:0]作为控制PAD_SD0_D0的控制参数。
| DS寄存器bit | SD3.0 PAD pin |
|---|---|
| bit0 | PAD_SD0_D0 |
| bit1 | PAD_SD0_D1 |
| bit2 | PAD_SD0_D2 |
| bit3 | PAD_SD0_D3 |
| bit4 | PAD_SD0_CMD |
| bit5 | PAD_SD0_CLK |
| bit6 | PAD_SD0_CDZ |
| bit7 | PAD_SD0_VCTRL |
| bit8 | PAD_SD0_GPIO0 |
| Register Name | Bank | Offset |
|---|---|---|
| DS0 | 0x1419 | 0x23 |
| DS1 | 0x1419 | 0x24 |
| DS2 | 0x1419 | 0x25 |
如下图,DS_bitx[2:0]一栏表示DS3~DS0对应bit位的值的组合,以二进制形式表示,而括号内的值为对应的十进制形式,后面会直接使用该值设定驱动能力。
| DS_bitx[2:0] | Driving(mA) |
|---|---|
| [DS2 DS1 DS0] | |
| 000 (0) | 2 |
| 001 (1) | 4 |
| 010 (2) | 6 |
| 011 (3) | 8 |
| 100 (4) | 10 |
| 101 (5) | 12 |
| 110 (6) | 14 |
| 111 (7) | 16 |
例如:设定DATA0的driving为16mA的寄存器值为:
1. riu_w 0x1419 0x23 0x1 2. riu_w 0x1419 0x24 0x1 3. riu_w 0x1419 0x25 0x1
4.1.2. FCIE driving寄存器¶
FCIE使用EMMC专用PAD,驱动能力由bank_0x141A offset_0x45 DRV2~DRV0寄存器的对应bit位构成的DRV[2:0] 3个参数共同决定。如下表:
| Register Name | Bank | Offset |
|---|---|---|
| DRV0 | 0x141A | 0x45[2:0] |
| DRV1 | 0x141A | 0x45[6:4] |
| DRV2 | 0x141A | 0x45[10:8] |
| Register Name (offset 0x45) | DRV_PAD | ||
| DATA_DRV | CLK_RST_DRV | CMD_DS_DRV | |
| DRV0 | Bit0 | Bit1 | Bit2 |
| DRV1 | Bit4 | Bit5 | Bit6 |
| DRV2 | Bit8 | Bit9 | Bit10 |
| DRV[2:0] | IOL(mA) | IOH(mA) |
|---|---|---|
| [DRV2 DRV1 DRV0] | ||
| 000 (0) | 8.18 | 8.56 |
| 001 (1) | 11.45 | 12 |
| 010 (2) | 14.7 | 15.4 |
| 011 (3) | 18 | 18.83 |
| 100 (4) | 21.3 | 22.3 |
| 101 (5) | 24.5 | 25.7 |
| 110 (6) | 27.8 | 29.1 |
| 111 (7) | 31.1 | 32.5 |
例如:设定所有DATA的driving为32mA的寄存器值为:
# riu_w 0x141A 0x45 0x111
4.2. SD 驱动能力配置¶
SD driver有提供sysfs控pin脚driving能力,使用方法是:
1. cd /sys/device/platform/soc/soc:sdmmc 2. echo [slotNo] <signal> [level] > set_sdmmc_driving_control 3. # 设置[slotNo]的<signal>信号线的驱动能力为[level]。 4. # [slotNo] -选择操作的slot。 5. # <signal> -可以选择设置clk、cmd、data、all或空值(等同all)。 6. # [level] -driving能力挡位,取值范围0~15。
将sd slot0的所有信号脚的drving能力设置为7:
1. cd /sys/device/platform/soc/soc:sdmmc 2. echo 0 all 7 > set_sdmmc_driving_control
SD driver支持从dts中配置clk,cmd,和data信号线的drving能力,配置方法如下:
1. sdmmc {
2. compatible = "sstar, sdmmc";
3. slotnum = <1>;
4. …
5. slot-clk-driving = <7>,<0>,<0>;
6. slot-cmd-driving = <7>,<0>,<0>;
7. slot-data-driving = <7>,<0>,<0>;
8. …
9. }
如上图,这三项属性参数分别是配置clk线,cmd线和data四根线的driving能力。可以看到每项参数都有三个值,这三个值分别代表每个slot的驱动能力。
4.3. EMMC 驱动能力配置¶
EMMC driver同样提供了sysfs控pin脚driving能力,位置在:/sys/device/platform/soc/soc:emmc。使用方法是:
1. echo [slotNo] <signal> [level] > eMMC_driving_control 2. # 设置[slotNo]的<signal>信号线的驱动能力为[level]。 3. # [slotNo] -选择操作的slot。 4. # <signal> -可以选择设置clk、cmd、data、all或空值(等同all)。 5. # [level] -driving能力挡位,取值范围0~15。
EMMC driver也同样支持从dts中配置clk,cmd和data信号线的driving能力,配置方法如下:
1. emmc {
2. compatible = " sstar_mci ";
3. slot-num = <1>;
4. …
5. clk-driving = <1>,<0>,<0>;
6. cmd-driving = <1>,<0>,<0>;
7. data-driving = <1>,<0>,<0>;
8. …
9. }
如上图,EMMC的参数解释和SD是一样的。