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

posted @ 2026-07-12 18:36  日暮_途远  阅读(5)  评论(0)    收藏  举报