外设
  • ISP(Image Signal Processor)关键技术指标

    ISP(Image Signal Processor)关键技术指标

    什么是ISP 一句话定义ISP:ISP就是把传感器吐出来的RAW电信号处理成可用于人眼、算法的图像数据的一整套“信号处理流水线”。 上面这张图是传统ISP流水线到AI ISP的演变。 (1)传统的ISP 传统的ISP,把传感器的RAW变成“人眼看起来好看”的sRGB图像,设计目标是给显示、编码、存储。核心指标是好看、稳定、符合显示标准。 名字 是什么(一句话) 在干嘛(直观理解) 不做会怎样 背后的直观原理 RAW 相机刚拍出来的“底片” 又暗又花,还是马赛克 人和算法几乎都用不了 传感器每个像素只看到一种颜色 Pre-Processing 修相机自己的毛病 修坏点、去黑边、补暗角 图像天生就歪、不均匀 把硬件缺陷在最早阶段修掉 Noise Reduction 去“雪花噪点” 把随机的脏点抹掉 图像像下雪,细节被噪声淹没 噪声是乱的,真实图像是连续的 Demosaicing 把马赛克变成彩色图 给每个像素补齐 RGB 画面全是格子,看不清 用邻居像素“猜”缺失颜色 White Balance 修正灯光颜色 让白的东西真的是白的 一会儿偏黄一会儿偏蓝 给 R/G/B 不同放大倍数 Color Space Transform 换颜色表达方式 从“相机语言”换成“通用语言” 不同设备颜色对不上 颜色坐标系的数学转换 Color Mapping 调色 / 美颜 让颜色更鲜艳、舒服 颜色发灰、发闷 用查表/曲线改颜色分布 Tone Mapping 调明暗 亮的压暗,暗的提亮 不是过曝就是全黑 用非线性曲线压亮度范围 Color Space Transform 输出前再转一次格式 变成显示/编码能用的格式 没法显示、没法存 适配显示/视频标准 sRGB 最终给人看的照片 手机上/屏幕看到的图 —— 人眼友好的标准颜色空间 3A是什么? 名字 全称 一句话白话 AE Auto Exposure 自动调亮度 AWB Auto White Balance 自动调颜色 AF Auto Focus 自动对焦 (2)Separate ISP & High-Level Vision 工业界的常见做法,特点仍然是为“人民服务”,被迫适应ISP输出。 RAW → ISP → RGB → Downstream Network step 1:摄像头通过ISP把RAW变成漂亮的sRGB图片,让人看起来舒服。 step 2:Down-Stream Network(下游网络,即 AI) 接收这张 sRGB 图片,进行 Detection(检测)或 Segmentation(分割)。 问题就是,ISP 为了让人眼舒服,可能会做“有损处理”。例如,为了降噪,把远处的纹理抹平了;或者为了 HDR,把原本线性的光照关系破坏了;AI 实际上是在“吃”人眼剩下的残羹冷炙。这就是为什么很多时候,人眼看着清楚,但 AI 识别率却上不去的原因。 (3)AI驱动的ISP 这是高端 AI 芯片(如自动驾驶芯片)正在探索的方向。原理: 不再使用固定的 ISP 参数。而是把 ISP 看作是一个可学习的网络 (ISP Network) 或者 可调参数的模块 (Tunable ISP)。 Backpropagation(反向传播): 注意那条虚线箭头。这意味着,如果 AI 识别错了,误差会反向传导回 ISP,告诉 ISP:“你刚才处理得不对,下次参数改一下。” 结果: ISP 不再为了“好看”而工作,而是专门为了“AI 识别率高”而工作。输出的图像可能人眼看着很怪(比如颜色发紫、对比度极高),但 AI 能够看清每一个细节。 (4)真正的端到端训练ISP 保留传统的ISP框架,在关键点引入可学习模块,输入/模型级的适配。旨在解决 (c) 方案太复杂、太难训练的问题。原理: 不完全抛弃传统 ISP,也不完全重写 ISP。而是在 RAW 数据和下游 AI 网络之间,插入一个轻量级的 Adapter(适配器)。 Learnable ISP stages: 让一小部分 ISP 功能变得“可学习”,专门把 RAW 数据转换成 AI 最喜欢的格式。 优势: 既利用了 RAW 数据的丰富信息,又不需要重新设计整个复杂的 ISP 硬件。 ISP的关键指标 图像质量(Image Quality, IQ) 这部分是最传统、也是厂商最爱卷的部分,关键的子指标如下: 指标 它解决什么问题 原理直觉 去噪 NR 低照、夜景噪声 空域/时域滤波 HDR / WDR 逆光、强对比 多曝光合成 / 曲线压缩 去马赛克 Demosaic RAW → RGB 插值 + 边缘保护 色彩还原 偏色、发灰 CCM / 3D LUT 锐化 发虚 高频增强 去雾 雾霾 对比度恢复模型 对于机器人来说,不是“越强越好”,主要关心的是能不能关掉、能不能锁参数、会不会引入时间的不稳定。 动态范围(Dynamic Range) 指标怎么看?把“亮的别爆,暗的别死” dB:60dB / 90dB / 120dB HDR:多帧 HDR(Multi-exposure),数字 WDR(Tone mapping) 对于机器人来说重要,尤其是户外、逆光、进出隧道,必须要。 时延(Latency)与确定性(Determinism) 这是机器人 vs消费电子的分水岭。 指标 含义 Line-based latency 不等一整帧 Frame-based latency 缓存整帧 Pipeline 深度 模块越多延迟越大 抖动(jitter) 帧到帧延迟是否稳定 延迟 ≠ 可怕,延迟不稳定 ≫ 可怕 同步与时间戳(Sync & Timestamp) 这是几乎所有 ISP 宣传页都会回避,但机器人最关键的点。关键问题。 多相机是否支持 硬同步 是否有 硬件时间戳 时间戳在哪一层打?曝光开始?帧结束?DMA 完成? 原理一句话,视觉 + IMU + 轮速 ≠ 同一个时间轴,SLAM就会崩。没有时间戳体系 = 再强 ISP 也不适合机器人。 几何一致性 项 用途 LDC 畸变校正 广角 / 鱼眼 标定模型 相机内参 双目 rectification 深度/SLAM 深度-RGB 对齐 传感器融合 ISP 不只是“修图”,它在 改变像素在空间中的几何含义。 可控性 AE/AWB/AF:是否可锁定、半自动、外部算法接管。 每个模块是否:可旁路、可独立配置、有确定顺序。
  • I2C协议总结

    I2C协议总结

    简介 以下是 I2C 总线的一些特性: 只需要两条线;串行数据线(SDA)和串行时钟线(SCL)。 连接到总线的每个设备都可以通过唯一的地址进行软件寻址简单的控制器/目标关系始终存在;控制器可以作为控制器发射器或控制器接收器。 它是真正的多控制器总线,包括冲突检测和仲裁,以防止如果两个或多个控制器同时发起数据传输,则会导致数据损坏。 串行面向8位的双向数据传输速度可达 100 kbit/s 标准模式,快速模式高达 400 kbit/s,快速模式Plus高达1Mbit/s,或高速模式下高达3.4 Mbit/s。 串行8位、单向数据传输在超快速模式下高达5 Mbit/s 片上滤波可抑制总线数据线上的尖峰,以保持数据完整性。 同一总线上可连接的IC 数量仅受最大总线电容。在某些条件下可以允许更大的电容。 串行数据 (SDA) 和串行时钟 (SCL) 两条线在连接到总线的设备。每个设备都由唯一的地址识别(无论是是微控制器、LCD 驱动器、存储器或键盘接口),并且可以作为发送器或接收器运行,具体取决于设备的功能。 LCD驱动器可能只是接收器,而存储器既可以接收也可以传输数据。此外发射器和接收器,当设备也可以被视为控制器或目标时执行数据传输。控制器是发起数据的设备总线上的传输并生成时钟信号以允许该传输。 传输协议 Start:数据传输的开始信号,由主机产生; Slave address:主机产生用于标识从设备的地址,bit7~bit1; R/W:主机产生,W(write)为主机向从机写数据,R(read)为主机向从机读数据,bit0; ACK:主机写数据从机收到拉低回复表示收到数据,主机读数据收到后拉低回复表示收到数据。ACK对应的是NACK,表示没有确认。 Data:发送的数据,以字节为单位,每8bit数据,从设备回一个ACK信号; Stop:数据传输的结束信号,由主机产生。 开始和停止标志 所有事务均以 START (S) 开始,并以 STOP (P) 终止(如上图图)。当 SCL为高电平时,SDA 线上的高电平到低电平的转换定义为启动信号。当SCL为高电平时,SDA线上的低电平到高电平转换定义了停止信号。 启动和停止条件始终由控制器生成。在 START 条件之后,总线被认为是繁忙的。在 STOP 条件后的某个时间,总线被认为再次空闲。 如果生成重复的 START (Sr) 而不是 STOP 条件,则总线保持忙碌状态。在这方面,START (S) 和重复START (Sr)条件在功能上是相同的。因此,对于本文档的其余部分,S符号用作通用术语来表示 START 和重复 START 条件,除非 Sr特别相关。如果连接到总线的设备包含必要的接口硬件,则可以轻松检测启动和停止条件。然而,没有此类接口的微控制器必须在每个时钟周期对 SDA 线进行至少两次采样才能感测转换。 数据格式 SDA 线上的每个字节必须是八位长。传输的字节数次数不受限制,但是每个字节后面必须跟一个ACK。数据首先传输最高有效位 (MSB),如果一个目标在执行完某些操作之前,无法接收或传输另一个完整的数据字节其他功能,例如服务内部中断,它可以保持时钟线SCL低电平强制控制器进入等待状态。当目标达到时,数据传输继续准备好另一个字节的数据并释放时钟线SCL。 ACK与NACK ack发生在每个字节传输之后,ACK允许接收器向发送器发出信号,表明已成功接收该字节并且可以发送下一个字节。控制器生成所有时钟脉冲,包括确认第九个时钟脉冲。确认信号定义如下:发送器在ACK时钟脉冲期间释放SDA线,以便接收器可以将 SDA 线拉低,并且在此时钟脉冲的高电平期间保持稳定的低电平(如上图),还必须考虑设置和保持时间。当SDA在此第九个时钟脉冲期间保持高电平时,这被定义为未确认信号NACK。然后,控制器可以生成 STOP 条件以中止传输,或生成重复的 START 条件以开始新的传输。有五种情况会导致生成 NACK: 总线上没有接收器具有传输的地址,因此没有设备可以响应确认。 接收器无法接收或发送,因为它正在执行某些实时功能,尚未准备好开始与控制器通信。 在传输过程中,接收器收到它无法理解的数据或命令。 在传输过程中,接收器无法再接收任何数据字节。 控制器接收器必须向目标发射器发出传输结束信号。 时钟同步(两个主设备) 两个控制器可以同时在空闲总线上开始传输,并且必须有一种方法来决定哪个控制器控制总线并完成传输。这是通过时钟同步和仲裁完成的。在单控制器系统中,不需要时钟同步和仲裁。(这里的控制器指的是主机)。 时钟同步是使用 I2C 接口到 SCL 线的有线“与”的方式连接来执行的。这意味着 SCL 线上从高到低的转换会导致相关控制器开始计算其低电平周期,并且一旦控制器时钟变为低电平,它就会将 SCL 线保持在该状态,直到达到时钟高电平状态(见图 7)。但是,如果另一个时钟仍处于其低电平周期内,则该时钟从低电平到高电平的转换可能不会改变 SCL 线的状态。因此,具有最长低电平周期的控制器将 SCL 线保持在低电平。具有较短低电平周期的控制器在此期间进入高电平等待状态。 当所有相关控制器都已计数完其低电平周期时,时钟线被释放并变为高电平。然后控制器时钟和 SCL 线的状态之间没有差异,并且所有控制器都开始计数其高电平周期。第一个完成其高电平周期的控制器将再次将 SCL 线拉低。这样,就生成了一个同步的 SCL 时钟,其低电平周期由时钟低电平周期最长的控制器决定,其高电平周期由时钟高电平周期最短的控制器决定。 仲裁 仲裁与同步类似,是指仅当系统中使用多个控制器时才需要的协议部分。目标设备(从设备)不参与仲裁程序。仅当总线空闲时,控制器才可以启动传输,两个控制器可以在 START 条件的最小保持时间 (tHD;STA) 内生成 START 条件,从而在总线上产生有效的 START 条件。然后需要仲裁来确定哪个控制器将完成其传输。 仲裁逐位进行。在每一位期间,当 SCL为高电平时,每个控制器检查 SDA 电平是否与其发送的电平匹配。此过程可能需要许多位。只要传输相同,两个控制器实际上可以完成整个事务而不会出错。控制器第一次尝试发送高电平,但检测到 SDA 电平为低电平时,控制器知道它已失去仲裁并关闭其 SDA 输出驱动器。另一个控制器继续完成其事务。 仲裁过程中不会丢失任何信息。失去仲裁的控制器可以生成时钟脉冲,直到失去仲裁的字节结束,并且 必须在总线空闲时重新启动其事务。如果控制器还包含目标功能,并且在寻址阶段失去仲裁,则获胜的控制器可能正在尝试寻址它。因此,失败的控制器必须立即切换到其目标模式。 下图显示了两个控制器的仲裁程序。可能涉及更多,具体取决于连接到总线的控制器数量。一旦生成 DATA1 的控制器的内部数据电平与 SDA 线上的实际电平之间出现差异,DATA1输出就会关闭。这不会影响获胜控制器发起的数据传输。 由于 I2C 总线的控制完全取决于竞争控制器发送的地址和数据,因此总线上没有中央控制器,也没有任何优先级顺序。 如果当一个控制器发送重复的 START 或 STOP 条件而另一个控制器仍在发送数据时,仲裁程序仍在进行中,则会出现未定义的情况。换句话说,以下组合会导致未定义的情况: 控制器 1 发送重复的 START 条件,控制器 2 发送数据位。 控制器 1 发送 STOP 条件,控制器 2 发送数据位。 控制器 1 发送重复的 START 条件,控制器 2 发送 STOP 条件。 小结: 所谓仲裁就是多个主设备该咋发咋发,但是了发了同时要进行检测,所发送的电平与自己发送的电平是否一致,如果不一直那就让别人先发。 读写位 参考: 《I2C-bus specification and user manual》
  • SPI与DBI概念

    SPI与DBI概念

    SPI 标准SPI 标准SPI接口,4根线CS、CLK、MISO、MOSI。4根线都是单线传输,主机通过MOSI发送数据,设备通过MISO发送数据给主机。标准的SPI可以支持全双工(发和收同时)、半双工(某个时刻发或收)、单双工(单方向传输,主机要么只能发送,要么只能接收)。 Dual SPI 双线SPI,顾名思义就是数据传输使用2根数据线。与标准SPI的线数一样4根线CS、CLK、MISO、MOSI,差别就是MISO,MOSI在某个时刻可以同时用来做数据收或发,因此该模式一般是半双工模式。对于Dual SPI类型接口外接的设备,通常是flash设备,根据传输的命令、地址是否使用2线又区分为DOUT和DIO模式。 DOUT模式 命令+地址阶段按照常规SPI传输1线传输,数据阶段变成2线(MOSI,MISO在读数据或写数据时使用两个线)。 DIO模式 命令阶段是常规SPI的1线传输,地址和数据阶段是双线传输。 Quad SPI CS,CLK,MOSI,MISO,WP,HOLD一共6根线,其中MOSI,MISO,WP,HOLD为数据线。根据命令、地址是否使用4线还是标准SPI一共分为3中模式,分别是QOUT,QIO,QPI。 QOUT 命令+地址阶段按照常规SPI传输1线传输,数据阶段变成4线(MOSI,MISO,WP,HOLD在读数据或写数据时使用4线)。 QIO 只在命令阶段是常规SPI的1线传输,地址和数据阶段是4线传输。 QPI 命令,地址,数据都是8线传输。 小结 DBI 3-Line模式 CSX(CS),SCL(CLK),SDA(MOSI或MISO),SDI(MOSI或MISO,可选)。前面CSX,SCL,SDA是必须的,所以称为3线模式。3线模式有区分为2中,interface I和interface II。 interface I: 数据收发之需要一根线SDA。 interface II:额外使用SDI,数据收和发端口独立。 需要注意的时,3线模式没有Data/CMD线用于区分是数据还是命令,所以需要在数据流MSB前额外早呢更加一位表示当前传输的数据是DATA还是CMD。 4-Line模式 CSX(CS),SCL(CLK),D/CX,SDA(MOSI或MISO),SDI(MOSI或MISO,可选)。相对于3线模式,额外添加了一根D/CX用来表示数据还是命令。根据数据传输是否需要1线还是2线区分interface I和interface II。 interface I: 数据收发之需要一根线SDA。 interface II:额外使用SDI,数据收和发端口独立。 与3线的区别是,多了一根D/CX来表是data还是cmd。 小结:SPI和DBI是不同的协议,QSPI一般说的是SPI的物理线有4(数据传输)+2(CLK+CS),同时QSPI根据指令,地址使用几线有QOUT,QIO,QPI 3种模式,QSPI一般说的是SPI协议而不是DBI协议,SPI和DBI是完全不同的协议,只是复用了一样的pin。 参考:https://blog.csdn.net/tianizimark/article/details/124608851
\t