This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DS90UB954-Q1EVM:摄像头传感器到串行器 I2C 问题

Guru**** 2595770 points
Other Parts Discussed in Thread: ALP

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/935028/ds90ub954-q1evm-camera-sensor-to-serializer-i2c-issue

器件型号:DS90UB954-Q1EVM
主题中讨论的其他器件:ALP

您好!

我正在使用 SerDes EVM (DS90UB954/DS90UB953A)开发摄像头传感器。

我的问题是 DS90UB954不使用 i2c 读取摄像头传感器寄存器。  

我使用 ALP 脚本进行了测试、如下所示。  

请给我任何建议。  

#设置 ID
UB954 = 0x60
UB953ID = 0x30
UB953 = 0x18
SensorID = 0x10
传感器= 0x00

#设置 Port0
board.WriteI2C (UB954、0x4C、0x01)

#设置反向通道配置(0x58)
板.WriteI2C (UB954、0x58、0x5E)

#设置 SER ID
#board.WriteI2C (UB954、0x5B、UB953ID)
#设置 SER 别



名 ID 板.WriteI2C (UB954、0x5C、UB953)#设置从属/摄像机 ID 板.GPIO2


、U954、UDIO 和 UDIO2输出 其中 GPIO2 = RESET 且 GPIO3 = PWDN
##board.WriteI2C (UB953、0x0E、0xC0)
#将 GPIO2和 GPIO3设置为高电平-使传感器退出断电模式
##board.WriteI2C (UB953、0x0D、0x0C)
##time.Sleep (0.1)#BOO3




、0xB0C 将传感器置于低电平状态以
使传感器#0x953、0xB0C RESET"

#Initialize Sensor
#Get configuration requirements from sensor manufacturer & write to sensor

#board.WriteI2C (Sensor、regAddr、value)#if two byte address are required use、board.WriteI2C (Sensor、regAddr byte 1、[regAddr byte 2、value]

) print "Sensor ID ="、board.ReadI2C (SensorID、0x00、[SensorID
、0x00、[regAddr byte 2、value])] print [regSensor ID ="、board.ReadI2C (SensorID ="、[SensorID = 0x00、

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Jongpil,

    你锁了吗? 您可以读取寄存器0x4D 来检查锁定状态吗?

    与摄像机通话时、请使用您设置的别名 ID。 在代码中、您将其设置为0x00。 我建议使用其他 i2c 地址。

    最棒的

    Jiashow

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好。  Jiashow、

    我检查了0x4D 寄存器。  

    锁定状态设置 如下所示。

     您能解释一下我,  

     如何设置 解锁状态。   

     我 不明白  什么是0x5D slaveID 和0x65 slaveAlias 寄存器。    

     摄像头传感器 ID 为0x10。   

      您是指0x65寄存器放置0x10。   

     我应该将什么值放入0x5D 寄存器中?  

     我还检查 了摄像头传感器板上的 i2c 信号。   它不是信号(SCL、SDA)上的任何变化状态。  

     我 正在等待您的回答。   

    最棒的

    Jongpil Chae

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Jongpil,

    图像链接已断开。 您在寄存器0x4D 中读取了什么值?

    寄存器0x5D 是摄像头的实际 I2C 地址。 您需要查找您正在使用的摄像头并相应地设置 I2C 地址。

    寄存器0x65是摄像机的别名(任意 ID)。 0x65可以设置为所需的任意偶数。

    设置别名 ID 后、您只能使用别名 ID 与摄像机通话。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好。  Jiashow、  

    感谢您对从 ID 的解释。   

    读取问题是由错误 的 i2c 地址引起的。  

    实数存取 i2c 地址为 0x10 、但 寄存器0x5d 希望 使用7位地址。  因此 我更改 了地址 0x20。  

    我读取 ID 寄存器、如下所示 。   

    让我知道如何使用摄像头传感器发送 mipi 数据。  

    是否可以在 ALP SW 上显示摄像头图像?

    我连接了测试脚本 、如下所示。   

      

    使用
    953从 DES 导入时间#reset 和初始化传感器
    
    #设置 ID
    UB954 = 0x60
    UB953ID = 0x30
    UB953 = 0x18
    SensorID = 0x20
    传感器= 0x20
    
    #设置 Port0
    board.WriteI2C (UB954、0x4C、0x01)
    
    #设置反向通道配置(0x58)
    板.WriteI2C (UB954、0x58、0x5E)
    
    #设置 SER ID
    #board.WriteI2C (UB954、0x5B、UB953ID)
    #设置 SER 别
    
    
    
    名 ID 板.WriteI2C (UB954、0x5C、UB953)#设置从属/摄像机 ID (UB954
    
    
    
    
    
    
    
    
    、UB95、I2C)板0x95、0x7C (U95
    
    、UB95、UB95、UB95、U95、UB95、U2、U95、U6、I2C (UB95、UB95、UB95、U6、UB95、U6、1C 原始电路板)#b、U95、I2C (U95、U95、U95、U95、I2C (Ub)#b 和 U95、0x4、U95、0C 原始电路板1、I2C (U95、0C)#b、0x4、U95、0C
    
    board.WriteI2C (UB954、0x32、0x01)#CSI TX Port1
    
    board.WriteI2C (UB954、0x33、0x23)#2LANES、CSI out enable
    
    board.WriteI2C (UB954、0x20、0x0)#CSI forwarding
    
    Time.SLEEP (1)
    
    
    #将 GPIO2和 GPIO3设置为输出、 其中 GPIO2 = RESET 且 GPIO3 = PWDN
    board.WriteI2C (UB953、0x0E、0xC0)
    #将 GPIO2和 GPIO3设置为高电平-使传感器脱离掉电模式
    板。WriteI2C (UB953、0x0D、0x0C)
    time.Sleep (0.1)
    #将 GPIO3设置为低电平以使传感器重新进入睡眠模式板
    
    。0x953
    
    
    
    
    、0x0C (UDIC) WriteI2C (0x953、0x3C.0C)时间初始化板、0x953C.0C (UCD3C.0C)
    #board.WriteI2C (UB953、0x1E、0x03)
    board.WriteI2C (UB953、0x49、0x28) # BIST CRC 清除、CRC 错误清除
    board.WriteI2C (UB954、0x1F、0x03)
    打印"传感器复位
    
    "#设置 LOCK_STS 禁用
    #print ("接收器锁定状态(0x04):"、hex (board.ReadI2C (UB954、0x04、0x1))
    )#regSensor
    #get 配置要求传感器制造商提供的配置并向传感器写入
    
    数据、如果需要 I2C 地址、请使用两个字节、请使用 I2C (WriteSensor 1) [regAddr 字节2、Value])
    
    打印"传感器 ID ="、board.ReadI2C (传感器、0x00、[0x00、0x01]
    )打印"传感器 ID ="、board.ReadI2C (传感器、0x00、[0x01、0x01]
    )打印" SMIA ROM ="、board.ReadI2C (传感器、0x00、[0x04、0x3C.EI2C
    
    
    
    )、0x3C.00x3c (
    
    
    
    0x01、0x3C.E0x3C.EI2C)、0x3C.E0x3C.E0x3C.E0x3c (读写模块0x01、0x3C.01、0x3C.E0x3C.01、0x3C.E0x3C.EI2C (
    
    
    
    
    读写模块0x01、0x3C.01、0x3C.01、0x3C.E0x3C.E0x3C.E0x3C.E0x3C.01.0x3C.EI2C)[SensorI2C (读写模块0x3C.01、0x3C.01.0x3C.E0x3C.01.0x3C.E0x3C.E0x3C.E0x3C.EC.EC.EC.012.012.012. [0x14、0x00])
    板.WriteI2C (SensorID、0x32、[0x35、0x08])
    板.WriteI2C (SensorID、0x30、[0x63、0x35])
    板.WriteI2C (SensorID、0x30、[0x7A、0x10])
    板.WriteI2C (SensorID、0x30、[SensorID、0x7B]
    、[SensorID、0x30、0x7b]板 [0x79、0x20])
    board.WriteI2C (SensorID、0x30、[0x70、0x05])
    board.WriteI2C (SensorID、0x30、[0x67、0x06])
    board.WriteI2C (SensorID、0x30、[0x71、0x62])
    board.WriteI2C (SensorID、0x30、0x32
    、[SensorID、0x73](SensorID) [0x03、0x43])
    board.WriteI2C (SensorID、0x32、[0x05、0x43])
    board.WriteI2C (SensorID、0x32、[0x0B、0x42])
    board.WriteI2C (SensorID、0x30、[0x07、0x00])
    board.WriteI2C (SensorID、0x30
    、0x30、[0x30] [0x20、0x58])
    board.WriteI2C (SensorID、0x30、[0x0D、0x34])
    board.WriteI2C (SensorID、0x30、[0x0E、0x17])
    board.WriteI2C (SensorID、0x30、[0x21、0x02])
    board.WriteI2C (SensorID、0x30
    、0x59、[SensorID、0x30] [0x02、0x01])
    board.WriteI2C (SensorID、0x30、[0x05、0x01])
    board.WriteI2C (SensorID、0x30、[0x08、0x04])
    board.WriteI2C (SensorID、0x30、[0x0F、0x70])
    board.WriteI2C (SensorID、0x30
    、0x69、0x30)、[WriteI2C (SensorID、0x30) board.WriteI2C (SensorID、0x30、[0x0F、0x69、0x30] [0x17、0x10])
    board.WriteI2C (SensorID、0x30、[0x19、0x19])
    board.WriteI2C (SensorID、0x30、[0x0C、0x62])
    board.WriteI2C (SensorID、0x30、[0x64、0x10])
    board.WriteI2C (SensorID、0x32、0x3C
    、0x70) [0x08、0x0E])
    board.WriteI2C (SensorID、0x3C、[0x09、0x10])
    board.WriteI2C (SensorID、0x3C、[0x31、0x0D]) board.WriteI2C
    (SensorID、0x3C、[0x37、0xAC])
    
    #Mode setting board.WriteI2C
    (SensorID、0x03、0x18
    
    
    、0x03、0x18、0xI2C
    (SensorID)、0x03、0x36、0x03、0x18、0x03、0xI2C (SensorID)、0x18、0x03、0x36、0x03、0x03、0xI2C (SensorID)、0x18、0x36、0x03、0x03、0x03、0xI2C (SensorID) [0x07、0xAA])
    board.WriteI2C (SensorID、0x03、[0x08、0x34])
    board.WriteI2C (SensorID、0x03、[0x09、0x42])
    board.WriteI2C (SensorID、0x3C、[0x1F、0x00])
    board.WriteI2C (SensorID、0x3C
    、0x3C、0x17、I2C) [0x0B、0x04])
    board.WriteI2C (SensorID、0x3C、[0x1C、0x47])
    board.WriteI2C (SensorID、0x3C、[0x1D、0x15])
    board.WriteI2C (SensorID、0x3C、0x3C、[0x14、0x04])
    board.WriteI2C (SensorID、0x3C
    、0x08、0x3C、0x3C、0x00、[WriteI2C] [0x20、0x03])
    board.WriteI2C (SensorID、0x08、[0x21、0x44])
    board.WriteI2C (SensorID、0x01、[0x12、0x0A])#RAW 格式
    板.WriteI2C (SensorID、0x01、[0x13、0x0A])#RAW 格式
    板.43、0x03 (SensorID、
    
    0x02
    
    、0x42B、0xI2C (SensorID、0x02、0x02)[SensorID、0x42B、0x02、0x02、0xI2C (写入电路板[SensorID、0x42] [0x00、0x00])
    board.WriteI2C (SensorID、0x02、[0x01、0x00])
    board.WriteI2C (SensorID、0x02、[0x02、0x03])
    board.WriteI2C (SensorID、0x02、[0x02、0x02])
    board.WriteI2C (SensorID、0x02
    、0x02、0x02、[WriteI2C) [0x05、0x80])
    
    board.WriteI2C (SensorID、0x06、[0x01、0x02])
    
    打印"S5K5E8初始化"
    time.Sleep (0.5)
    
    board.WriteI2C (SensorID、0x3C、0x00)
    board.WriteI2C (SensorID、0x53)
    
    
    
    、
    
    0x53
    (I2C)、0x61 (I2C) Hex 1、0x61 (I2C) Hex 1、0x61 (I2C)、0x53、0x61 (I2C)、0x61 (Hex 1) x 1、0x61 (eI2C) x 1)、0x61 (I2C (Hex 1) x 1、0x61 (Hex 1) x 1、0x53 (Hex 1) x 1) x 1、读写1、读写1、读写器(读写器(I2C (读写器1)、读写器(读写器(读写器、读写器、读写器(读写器、读写器(I2C)
    打印"Packer 头字计数1 ="、十六进制(board.ReadI2C (UB953、0x63、1)) 

    最棒的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您似乎能够访问传感器的 I2C 地址:

    print "Sensor ID = ",board.ReadI2C(Sensor, 0x00, [0x00, 0x01])
    print "Sensor ID = ",board.ReadI2C(Sensor, 0x00, [0x01, 0x01])
    print "SMIA VER  = ",board.ReadI2C(Sensor, 0x00, [0x04, 0x01])

    为了让成像仪开始发送 MIPI 数据、您需要摄像机供应商提供的初始化脚本。 您可能希望跟进这些问题。

    ALP 不显示实际的 CSI 数据、但可以通过 SER 和 DES 寄存器检测摄像头分辨率和负载。

    最棒的

    Jiashow

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!  

    正如您提到的、我添加了摄像头传感器初始化脚本以开始发送 MIPI 数据。

    我向摄像机寄存器发送了流启动命令。
    但是"信息"选项卡中没有任何更改的"当前 RX 端口状态"。
    我想、如果在摄像头传感器寄存器上设置了流功能、则必须更改当前 RX 端口状态信息的水平和垂直值。

    我已选中更改状态"通过当前 CSI TX 状态的 STS "、如下所示。

    是否可以在没有 ISP 处理器的情况下进行 MIPI 数据测试?
    现在、我仅测试连接了摄像头传感器部件。

    摄像头传感器+ ds90ub953 --> ds90ub954 + PC (ALP)

    请告诉我如何从 SER 和 DES 寄存器检测摄像机分辨率和负载。

    最棒的

    Jongpil Chae

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Jongpil,

    它看起来不像摄像头传感器发送 MIPI 数据。 现在、"Pass Threshold"(在 ALP 上)已禁用。 如果将其更改为一个帧、则 PASS 不应再有效。

    如果摄像头传感器正在发送正确的 MIPI 数据、您应该会看到水平和垂直分辨率。 现在、它显示"0 byte"和"0行"。

    最棒的

    Jiashow  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jiashow、您好!  

     您是说、如果将"pass threshold"设置为一帧、则在 ALP 上显示水平、垂直分辨率?

     请查看我的传感器设置工作流程。  

     1. SER/DES/传感器 ID 设置  

     board.WriteI2C (UB954、0x5B、UB953ID)   

     board.WriteI2C (UB954、0x5C、UB953)

     board.WriteI2C (UB954、0x5D、sensorID)

     board.WriteI2C (UB954、0x65、sensorAlias)  

     DES 设置  

     board.WriteI2C (UB954、0x4C、0x01)   #设置 Port0

     board.WriteI2C (UB954、0x58、0x5E)    #设置反向通道配置(0x58)

     SER GPIO -传感器 复位   

     board.WriteI2C (UB953、0x0E、0xC0)

     board.WriteI2C (UB953、0x0D、0x0C)
     时间睡眠(0.1)
     board.WriteI2C (UB953、0x0D、0x08)
     时间睡眠(1)
     board.WriteI2C (UB953、0x0D、0x0C)

     4.传感器寄存器初始化 (16位地址,8位数据)

      board.WriteI2C (sensorAlias、0x30、[0x13、0x01])

      …

      board.WriteI2C (SensorAlias、0x01、[0x00、0x01])  #mipi 流式传输开始  

     

     5.检查 ALP 上的信息点击"Current RX Port Status"(当前 RX 端口状态)   

      

      在步骤4完成后、我检查了使用示波器发送到串行器的 mipi 数据。

      发送 mipi 数据时应检查什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果串行器提供 CSI 数据、则应查看摄像头的分辨率(无论是否配置 PASS)。 您可以探测来自摄像机的 MIPI 数据通道、以验证是否存在 MIPI 活动。

    我建议:

     1. SER/DES/传感器 ID 设置  

     board.WriteI2C (UB954、0x4C、0x01)   #设置端口0 这首先进行

     board.WriteI2C (UB954、0x5B、UB953ID)   

     board.WriteI2C (UB954、0x5C、UB953)

     board.WriteI2C (UB954、0x5D、sensorID)

     board.WriteI2C (UB954、0x65、sensorAlias)  

     DES 设置  

     board.WriteI2C (UB954、0x58、0x5E)    #设置反向通道配置(0x58)

     SER GPIO -传感器 复位   

     board.WriteI2C (UB953、0x0E、0xC0)

     board.WriteI2C (UB953、0x0D、0x0C)
     时间睡眠(0.1)
     board.WriteI2C (UB953、0x0D、0x08)
     时间睡眠(1)
     board.WriteI2C (UB953、0x0D、0x0C) 这取决于哪个串行器 GPIO 连接到传感器复位引脚。 您可能需要对此进行仔细检查

     4.传感器寄存器初始化 (16位地址,8位数据)

      board.WriteI2C (sensorAlias、0x30、[0x13、0x01])

      …

      board.WriteI2C (SensorAlias、0x01、[0x00、0x01])  #mipi 流式传输开始  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jiashow,  

    感谢你的帮助。   

    根据您的建议,我编辑了脚本。  

    我发现 DES 的转发寄存器和  SER 的 General_CFG 设置不符合要求。

    我编辑了摄像头传感器分辨率1280x720。  

    它在 ALP 中显示信息选项卡 、如下所示  

    我认为垂直值是正确的(720)。
    但是水平值是错误的(1600 --> 1280)。

    传感器输出寄存器值为1280。

    调整哪个寄存器来调整来自传感器输出的 MIPI 数据包的大小?

    最棒的

    Jongpil Chae

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Jongpil,

    水平分辨率(像素)=水平线(以字节为单位)* 8 (位/字节)/# bpp  

    最棒的

    Jiashow