Camera涉硬参数调整指南


REVISION HISTORY

Revison No.
Description
Date
1.0
  • Initial release
  • 05/17/2024

    1. 模拟 IP 涉硬参数调试

    1.1. USB 2.0


    目前一共提供五个参数可供调整,分别是:pre-emphasis、slew rate、swing trim、disconnect detector reference voltage以及RX squelch calibration reference voltage(其中swing trim在OTP中可能已经有trim过,调整时需要注意)。

    1.1.1. pre_emphasis

    位于UTMI bank offset 0x43[9:8] ,调整值范围:0~3,值越大pre-emphasis越强。

    1) 查看当前值: cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/pre_emphasis

    2) 设置: echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/pre_emphasis

    1.1.2. slew_rate

    位于UTMI bank offset 0x44[2:1] ,调整值范围:0~3。

    1) 查看当前值: cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/slew_rate

    2) 设置: echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/slew_rate

    1.1.3. swing trim(此参数OTP有trim过,修改时需要找HWRD确认)

    位于UTMI bank offset 0x44[9:4] ,调整值范围:0~63。

    1) 查看当前值: cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/swing_trim

    2) 设置: echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/swing_trim

    1.1.4. disconnect detector reference voltage

    位于UTMI bank offset 0x41[4:0] ,调整值范围:0~31。

    1) 查看当前值: cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/disconnect_refer_voltage

    2) 设置: echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/disconnect_refer_voltage

    1.1.5. RX squelch calibration reference voltage

    位于UTMI bank offset 0x4b[4:0] ,调整值范围:0~31。

    1) 查看当前值: cat /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/squelch_refer_voltage

    2) 设置: echo value > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/squelch_refer_voltage

    1.1.6. 眼图测试

    1)开机进入kernel,执行下列命令之后可以接示波器查看眼图

    2)眼图测试波形不符合要求时,可以调整上述5个参数,直到波形完美为止

    测试highspeed眼图,执行:echo “hs” > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/eye_diagram_switch

    测试fullspeed眼图,执行:echo “fs” > /sys/kernel/debug/usb/phy-soc\:sstar-usb2-phy.0/eye_diagram_switch


    1.2. Ethernet internal ephy


    Ephy驱动能力共有32个档位可以调整,如下表格所示:

    Level Name Value
    Level_0 0x1F
    Level_1 0x1E
    Level_2 0x1D
    Level_3 0x1C
    Level_4 0x1B
    Level_5 0x1A
    Level_6 0x19
    Level_7 0x18
    Level_8 0x17
    Level_9 0x16
    Level_10 0x15
    Level_11 0x14
    Level_12 0x13
    Level_13 0x12
    Level_14 0x11
    Level_15 0x10
    Level_16 0x00(Default)
    Level_17 0x01
    Level_18 0x02
    Level_19 0x03
    Level_20 0x04
    Level_21 0x05
    Level_22 0x06
    Level_23 0x07
    Level_24 0x08
    Level_25 0x09
    Level_26 0x0A
    Level_27 0x0B
    Level_28 0x0C
    Level_29 0x0D
    Level_30 0x0E
    Level_31 0x0F

    驱动能力调整proc命令使用方法说明

    1. # echo swing_100 Relative > /sys/devices/virtual/sstar/emac0/turndrv
    2. swing : Value
    

    命令中Relative 表示需要升档或者降档的相对档位,Value 为上表中Value 那一栏。如果要在当前档位的基础上调高5个档位,则:

    1. # echo swing_100 0 > /sys/devices/virtual/sstar/emac0/turndrv  // 查看当前的档位
    2. swing : 0x00  //串口打印当前的档位
    3. # echo swing_100 5 > /sys/devices/virtual/sstar/emac0/turndrv // 上调5个档位
    4. swing : 0x05
    

    如要在当前档位的基础上调低5个档位,则:

    1. # echo swing_100 0 > /sys/devices/virtual/sstar/emac0/turndrv  // 查看当前的档位
    2. swing : 0x05  //串口打印当前的档位
    3. # echo swing_100 -5 > /sys/devices/virtual/sstar/emac0/turndrv // 下调5个档位
    4. swing : 0x00
    

    swing_100为100M Ephy所使用命令,若Ephy处于10M模式下,则需使用swing_10

    1. # echo swing_10 0 > /sys/devices/virtual/sstar/emac0/turndrv   //查看当前的档位
    2. swing : 0x00  //串口打印当前的档位
    3. # echo swing_10 1 > /sys/devices/virtual/sstar/emac0/turndrv   //上调1个档位
    4. swing : 0x01
    5. # echo swing_10 -2 > /sys/devices/virtual/sstar/emac0/turndrv  //下调2个档位
    6. swing : 0x10
    

    1.3. SDMMC 驱动能力配置


    1.3.1. 通过sysfs配置驱动能力

    SDMMC driver有提供sysfs控pin脚driving能力,使用方法是:

    1. cd /sys/devices/soc0/soc/<reg>:sstar_sdmmc[i]
    2. # <reg> -根据dtsi实际配置信息生成reg值
    3. # [i]   -根据dtsi实际配置信息生成index值
    4. echo [slotNo] <signal> [level] > set_sdmmc_driving_control
    5. # 设置[slotNo]的<signal>信号线的驱动能力为[level]。
    6. # [slotNo] -选择操作的slot。
    7. # <signal> -可以选择设置clk、cmd、data、all或空值(等同all)。
    8. # [level]  -driving能力挡位,取值范围0~1。
    

    将sd0的所有信号脚的driving能力设置为1

    1. cd /sys/devices/soc0/soc/1f282600.sstar_sdmmc0
    2. echo 0 all 1 > set_sdmmc_driving_control
    

    将sd1的四根data脚的driving能力设置为1:

    1. cd / sys/devices/soc0/soc/1f282000.sstar_sdmmc1
    2. echo 1 data 1 > set_sdmmc_driving_control
    

    1.3.2 通过dts配置驱动能力

    SDMMC driver支持从dts中配置clk,cmd和data信号线的driving能力,配置方法如下:

    1. sstar_sdmmc0: sstar_sdmmc0 {
    2.     compatible = "sstar,sdmmc";
    3.     bus-width = <4>;
    4.     no-sdio;
    5.     no-mmc;
    6.     …
    7.     clk-driving = <1>;
    8.     cmd-driving = <1>;
    9.     data-driving = <1>;
    10.    …
    11. }
    
    1. sstar_sdmmc1: sstar_sdmmc1 {
    2.     compatible = "sstar,sdmmc";
    3.     bus-width = <4>;
    4.     no-mmc;
    5.     …
    6.     clk-driving = <1>;
    7.     cmd-driving = <1>;
    8.     data-driving = <1>;
    9.    …
    10. }
    

    如上图,这三项属性参数分别是配置clk线,cmd线和四根data线的driving能力。驱动档位由实际选择的PAD 决定,具体可参考相关的GPIO PAD配置文档。


    2. 数字接口驱动能力调整

    2.1. 使用背景


    由于GPIO lib 不支持 GPIO 上下拉及驱动能力的接口,导致我司的 GPIO Hal 层驱动缺少对 GPIO 上下拉和驱动能力设置的支持。然而在日常使用中,GPIO 的上下拉及驱动能力经常需要动态调整,所以增加上下拉及驱动能力设置 API 和用户层接口变得十分必要。


    2.2. 内核接口


    2.2.1. sstar_gpio_pull_up

    • 目的

      开启指定的 GPIO 上拉功能

    • 语法

      U8 sstar_gpio_pull_up(U8 gpio_index)
      
    • 参数

      Parameter Commemt
      gpio index gpio num
    • 返回值

      Return Value Commemt
      0 设置成功
      Other 引脚不支持上下拉设置或者输入参数错误

    2.2.2. sstar_gpio_pull_down

    • 目的

      开启指定的 GPIO 下拉功能

    • 语法

      U8 sstar_gpio_pull_down(U8 gpio_index)
      
    • 参数

      Parameter Commemt
      gpio index gpio num
    • 返回值

      Return Value Commemt
      0 设置成功
      Other 引脚不支持上下拉设置或者输入参数错误

    2.2.3. sstar_gpio_pull_off

    • 目的

      关闭指定的 GPIO 上/下拉功能,该 GPIO 切换至悬空态

    • 语法

      U8 sstar_gpio_pull_off(U8 gpio_index)
      
    • 参数

      Parameter Commemt
      gpio index gpio num
    • 返回值

      Return Value Commemt
      0 设置成功
      Other 引脚不支持上下拉设置或者输入参数错误

    2.2.4. sstar_gpio_drv_set

    • 目的

      设置指定的 GPIO 的驱动能力

    • 语法

      U8 sstar_gpio_drv_set(U8 gpio_index, U8 level)
      
    • 参数

      Parameter Commemt
      gpio index gpio num
      level 所能支持的驱动能力等级:0、1、2、3...
    • 返回值

      Return Value Commemt
      0 设置成功
      Other 引脚不支持上下拉设置或者输入参数错误

    2.3. 用户层调试方法


    2.3.1. 开启功能

    要使用用户层接口需要打开 CONFIG_MSYS_GPIO,该配置位于menuconfig中:

    Device Drivers  --->
    
        [*] SStar SoC platform drivers  --->
            [*]   support GPIO pull and driving modify
    

    2.3.2. 使用功能

    设置上/下拉之前需要将 GPIO 设置为输入状态,输出状态下上下拉是没办法测量的:

    1. # cd /sys/class/gpio
    2. # echo gpio_index > export
    3. # echo in > gpiogpio_index/direction
    

    设置上拉、下拉或者悬空:

    1. # cd sys/class/sstar/msys
    2. # echo gpio_index/gpio_name down/up/off > gpio_pull
    

    查看当前状态:

    1. # cd sys/class/sstar/msys
    2. # cat gpio_pull
    

    以PAD_GPIO0为例,设置为输入:

    1. # cd /sys/class/gpio
    2. # echo 46 > export
    3. # echo in > gpio46/direction
    

    设置为上拉:

    1. # cd sys/class/sstar/msys
    2. # echo 46 up > gpio_pull
    3. # echo PAD_GPIO0 up > gpio_pull //the same to above
    

    设置为悬空:

    1. # cd sys/class/sstar/msys
    2. # echo 46 off > gpio_pull
    3. # echo PAD_GPIO0 off > gpio_pull //the same to above
    

    查看当前状态:

    1. # cd sys/class/sstar/msys
    2. # cat gpio_pull
    

    设置驱动能力之前需要将 GPIO 设置为输出高电平状态方便测量:

    1. # cd /sys/class/gpio
    2. # echo gpio_index > export
    3. # echo high > gpiogpio_index/direction
    

    调节驱动能力:

    1. # cd sys/class/sstar/msys
    2. # echo gpio_index/gpio_name level_num > gpio_drive
    

    以PAD_GPIO0设置为8mA为例

    1. # cd /sys/class/gpio
    2. # echo 46 > export
    3. # echo high > gpio46 /direction
    4. # cd sys/class/sstar/msys
    5. # echo 46 1 > gpio_drive
    6. # echo PAD_GPIO0 1 > gpio_drive //the same to above
    

    每次执行echo指令后,可以通过cat同一个文件确定上一条echo命令的状态。