Camera涉硬参数调整指南
REVISION HISTORY¶
Revison No. | Description |
Date |
---|---|---|
1.0 | 11/21/2023 | |
1.1 | 1/24/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 > /proc/gmac_0/turndrv // 查看当前的档位 2. swing : 0x00 //串口打印当前的档位 3. # echo swing_100 5 > /proc/gmac_0/turndrv // 上调5个档位 4. swing : 0x05
如要在当前档位的基础上调低5个档位,则:
1. # echo swing_100 0 > /proc/gmac_0/turndrv // 查看当前的档位 2. swing : 0x05 //串口打印当前的档位 3. # echo swing_100 -5 > /proc/gmac_0/turndrv // 下调5个档位 4. swing : 0x00
此外,也提供了以绝对档位为参数的调整方法:
1. # echo swing_100_st absolute_value > /proc/gmac_0/turndrv 2. swing : Value
其中 absolute_value 为设定的档位值,其取值范围为上表中Value 那一栏, Value 为当前的档位值;如需将驱动能力设置为Level_31 则:
1. # echo swing_100_st 0x0F > /proc/gmac_0/turndrv 2. swing : 0x0F
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~4。
将sd的所有信号脚的driving能力设置为2
1. cd /sys/devices/soc0/soc/1f282600.sstar_sdmmc1 2. echo 0 all 2 > set_sdmmc_driving_control
将emmc的四根data脚的driving能力设置为1:
1. cd / sys/devices/soc0/soc/1f008400.sstar_sdmmc0 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-sd; 6. … 7. clk-driving = <2>,<0>,<0>; 8. cmd-driving = <2>,<0>,<0>; 9. data-driving = <2>,<0>,<0>; 10. … 11. } 1. sstar_sdmmc1: sstar_sdmmc1 { 2. compatible = "sstar,sdmmc"; 3. bus-width = <4>; 4. no-mmc; 5. … 6. clk-driving = <2>,<0>,<0>; 7. cmd-driving = <2>,<0>,<0>; 8. data-driving = <2>,<0>,<0>; 9. … 10. }
如上图,这三项属性参数分别是配置clk线,cmd线和四根data线的driving能力。可以看到每项参数都有三个值,这三个值分别代表每个slot的驱动能力,驱动档位由实际选择的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 msys api 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/mstar/msys 2. # echo gpio_index/gpio_name down/up/off > gpio_pull
查看当前状态:
1. # cd sys/class/mstar/msys 2. # cat gpio_pull
以PAD_PM_GPIO0为例,设置为输入:
1. # cd /sys/class/gpio 2. # echo 71 > export 3. # echo in > gpio71/direction
设置为上拉:
1. # cd sys/class/mstar/msys 2. # echo 71 up > gpio_pull 3. # echo PAD_PM_GPIO0 up > gpio_pull //the same to above
设置为悬空:
1. # cd sys/class/mstar/msys 2. # echo 71 off > gpio_pull 3. # echo PAD_PM_GPIO0 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 > gpiogpio_index/direction
调节驱动能力:
1. # cd sys/class/mstar/msys 2. # echo gpio_index/gpio_name level_num > gpio_drive
以PAD_PM_GPIO0设置为8mA为例
1. # cd /sys/class/gpio 2. # echo 71 > export 3. # echo high > gpio71 /direction 4. # cd sys/class/mstar/msys 5. # echo 71 1 > gpio_drive 6. # echo PAD_PM_GPIO0 1 > gpio_drive //the same to above
每次执行echo指令后,可以通过cat同一个文件确定上一条echo命令的状态。