MIPI测试方法
2016/07/10硬件联调总结
背景说明:
硬件搭建完整的基于某芯MIPI的域控台架做验证。
相机初始化:
当没有外接车机时 ./xxxx_camera_run.sh 1
当外接车机时 ./xxxx_camera_run.sh 2
以太网的方式接入到SOC,
cd /app
cd /cam_xxxx_xxx
./xxxx_camera_run.sh 1
如果出现错误输入以下指令检测,此指令能看到具体的地址信息
i2cdetect -y -r 1
加串器检测脚本 ./ser_bypass_check.sh
脚本设计亮点:1.如果未读取到数据显示为空;2.如果当前读取到的数据和上一周期的不一致会用星号做区分;3.如果读取上一周期和当前周期一致则不做区分
#!/bin/bash
set -u
# 定义需要监控的总线列表
BUS_LIST=("8" "3" "4")
# 固定配置:设备0x40 寄存器0x05 0x08
# 目标设备I2C从机地址为0x40
# 要操作的16位寄存器地址为0x0508
DEV=0x40
REG_H=0x05
REG_L=0x08
REG_NAME="0x0508计数"
# 存储上一次读取值
declare -A last_cache
# Ctrl+C优雅退出
trap 'echo -e "\n监控脚本退出"; exit 0' SIGINT
while true; do
clear
echo "===== 监控I2C3/I2C4/I2C8 0x40 寄存器0x0508 | * = 数值跳变有信号 ====="
echo ""
for bus in "${BUS_LIST[@]}"; do
echo "---------- I2C总线 ${bus} ----------"
key="${bus}_${DEV}_${REG_H}${REG_L}"
# I2C读取,屏蔽报错输出
val=$(i2ctransfer -y -f "$bus" w2@"$DEV" "$REG_H" "$REG_L" r1 2>/dev/null)
if [ -z "$val" ]; then
printf "%-12s = --\n" "$REG_NAME"
last_cache["$key"]=""
continue
fi
old=${last_cache["$key"]:-""}
last_cache["$key"]="$val"
if [ -z "$old" ]; then
printf "%-12s = %s\n" "$REG_NAME" "$val"
elif [ "$val" != "$old" ]; then
printf "%-12s = %s *\n" "$REG_NAME" "$val"
else
printf "%-12s = %s\n" "$REG_NAME" "$val"
fi
echo ""
done
sleep 1
done

解串器检测脚本 ./serdes_mipi_check.sh
注意read dev ah al tag <<< "$reg"这个赋值操作
#!/bin/bash
set -u
# 寄存器配置:设备 高地址 低地址 简写标签
REG_LIST=(
"0x43 0x05 0x08 L0"
"0x44 0x05 0x08 L1"
"0x45 0x05 0x08 L2"
"0x46 0x05 0x08 L3"
"0x60 0x05 0x62 MIPIa_0"
"0x60 0x09 0x62 MIPIb"
"0x60 0x58 0xb8 MAC0"
"0x60 0x5c 0xb8 MAC1"
"0x60 0x60 0xb8 MAC2"
"0x60 0x64 0xb8 MAC3"
)
# 轮询总线:0、1、2、7
BUSES=("0" "1" "2" "7")
# 缓存上一轮读数
declare -A last
# Ctrl+C 安全退出
trap 'echo -e "\n检测脚本停止"; exit 0' SIGINT
while true; do
clear
echo "==== I2C0 / I2C1 / I2C2 / I2C7 链路计数检测 | * = 数值跳变有数据流 ===="
echo ""
for bus in "${BUSES[@]}"; do
echo "---------- I2C总线 ${bus} ----------"
for reg in "${REG_LIST[@]}"; do
read dev ah al tag <<< "$reg"
key="${bus}_${dev}_${ah}_${al}"
# 读取寄存器,屏蔽报错
val=$(i2ctransfer -y -f "$bus" w2@"$dev" "$ah" "$al" r1 2>/dev/null)
# 去除0x前缀,拼接完整寄存器地址
ah_no0x=${ah#0x}
al_no0x=${al#0x}
full_reg="0x${ah_no0x}${al_no0x}"
if [ -z "$val" ]; then
# 读取失败显示 --
printf "%-8s %s:%s = --\n" "$tag" "$dev" "$full_reg"
last["$key"]=""
continue
fi
old=${last["$key"]:-""}
last["$key"]="$val"
if [ -z "$old" ]; then
# 首次读取
printf "%-8s %s:%s = %s\n" "$tag" "$dev" "$full_reg" "$val"
elif [ "$val" != "$old" ]; then
# 数值变化,末尾标记 *
printf "%-8s %s:%s = %s *\n" "$tag" "$dev" "$full_reg" "$val"
else
# 数值无变化
printf "%-8s %s:%s = %s\n" "$tag" "$dev" "$full_reg" "$val"
fi
done
echo ""
done
sleep 1
done


浙公网安备 33010602011771号