ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

热成像机芯BT601接口调试实战:FPGA采集与寄存器配置全解析

热成像机芯BT601接口调试实战:FPGA采集与寄存器配置全解析

热成像机芯BT601的数字机芯接口应用,是我这几年做得最多的活之一。很多朋友一听到“热成像机芯”,脑子里浮现的都是像FPA温度、NETD、快门非均匀性校正这类光学指标,但真正到了整机集成阶段,最磨人的往往不是探测器本身,而是那个看起来不起眼的视频输出接口。BT601数字机芯这类产品,输出的是并行数字视频流,配合I2C控制总线,位置不上不下,不少做安防、巡检、测温整机的工程师都在这一环卡过壳。这篇文章就把我实际调试BT601数字机芯接口的完整过程梳理一遍,包括接口选型思路、时序标准、寄存器配置、FPGA采集链路,以及各种能想到的排查方向和避坑经验,给正在做类似项目的朋友一个可以直接抄作业的参考。

1. 项目概述与接口选型思路

1.1 这个项目到底要解决什么问题

先说清楚这套东西用在哪。手头的项目是一个工业级热成像采集模块,机芯选型就是标题里的BT601数字机芯,后端接FPGA做图像采集,再往上跑测温算法、伪彩映射、OSD叠加,最后数据走网络或USB出去。

这类需求在现在的市场里非常常见:巡检机器人不带红外就没法发现发热隐患,配电房里要监测局放和接头温度,边境和园区的测温闸机需要同时看可见光和热像,还有一些户外手持观测设备、无人机光电吊舱,都需要把热成像机芯的视频稳定地接进自己的主控平台。

BT601数字机芯在这个链条里的角色很纯粹:它负责把红外探测器输出的原始信号变成标准格式的数字视频,同时通过I2C让主控去控制增益、积分时间、伪彩、快门校正这些参数。也就是说,接口层面你只需要搞定两件事:把数字视频流接进来,把I2C控制打通。听起来不难,但实际调试中,光是把“画面正常出来”这一步做稳,就已经能筛掉一批没有真正做过热成像整机的人。

1.2 为什么是数字机芯而不是模拟、USB、MIPI

在做方案选型的时候,我们几个方向都评估过,各有各的道理,但最终落在BT601这类并行数字接口上,是有非常现实的原因的。我把当初对比的几个方案整理了一下:

接口类型视频质量开发难度实时性工业可靠性备注
CVBS模拟低低高高清晰度受限,叠加OSD麻烦
USB2.0/3.0中低中中设备枚举在长期运行下偶发掉线
MIPI CSI高高高中协议解析复杂,FPGA不友好
BT.601/BT.656并行数字高中高高接口简洁,调试直观

先说CVBS,模拟视频确实方便,随便一个视频解码芯片就能接入,但热成像本身分辨率就不高,再走模拟通路,清晰度损失明显,而且后面要做测温数据叠加、自定义字符OSD,必须先转换成数字域,多一道工序就多一个坑。

USB方案在消费类产品里很香,但在工业设备上,尤其是机器人和闸机这种需要7x24小时运行的场景,设备枚举、驱动兼容、延迟抖动都是隐患。我遇到过几次USB摄像头在高温环境运行一段时间后掉枚举的问题,排查起来非常痛苦。

MIPI CSI则是对手机平台非常友好,但对FPGA和工业SoC来说,要先把DPHY层的协议做解析,还要处理Lane分配和虚拟通道,开发量大不少,更关键的是MIPI的长线传输能力有限,不利于机芯与主板的物理分离布局。

BT601数字机芯的并行数字接口,本质上就是把视频“搬运”这个最核心的问题用最直接的方式解决掉。电平标准简单,时序逻辑直观,用FPGA甚至高端单片机都能接。没有复杂的协议栈,没有操作系统依赖,点对点的时钟和数据线天然适合工业场合的稳定运行。我们当时评估下来的结论是:在这个产品的生命周期里,BT601这类接口的维护成本是最低的。

2. 接口标准拆解:BT601、BT.656与热成像机芯的关系

2.1 先别急着接线,搞清楚输出标准

这里先纠正一个常见的误区。很多采购单和产品命名里写的“BT601数字机芯”,其实并不严谨。

严格来说,ITU-R BT.601是一套分量视频标准,定义了YCbCr 4:2:2的色彩空间和行结构;而并行数字接口的物理与时序规范,来自ITU-R BT.656,它定义了带内嵌同步字的数字视频流格式。只是行业里约定俗成,大家把输出并行数字视频的机芯习惯性叫做“BT601机芯”,所以拿到的寄存器手册里,接口章节写的很可能是BT.656相关的时序。

这个区别不只是文字游戏,它直接决定你的采集逻辑怎么写。

  • 如果机芯输出的是标准BT.656内嵌同步格式,那引脚上通常只有PCLK和D[7:0]或D[9:0],同步是通过数据流里的FF 00 00 XY时序字来标识的,采集端需要自行检测同步字来切割帧和行。
  • 如果机芯输出的是带显式同步的版本,那引脚上会多出VSYNC、HSYNC、DE(数据有效)这些信号,采集逻辑简单很多,直接用DE门控数据就行。

还有一个非常关键的点:热成像机芯的分辨率通常不是BT.601标准里的720x576或720x480,而是像384x288、640x512这种非标分辨率。厂商为了适配这些分辨率,往往会在标准BT.656的基础上做修改,常见做法就是引出一条或几条同步信号线,方便用户对接。

所以拿到一块BT601机芯,第一件事绝对不是写采集代码,而是去看引脚定义,确认它到底是内嵌同步的BT.656,还是带DE的“BT.656变体”。带DE的你电路和逻辑都可以省一半事,不带DE的就老老实实做同步字检测。我自己的经验是,选型阶段如果能选带DE输出的版本,就尽量选带DE的,省下的调试时间非常可观。

2.2 引脚定义与时序参数

以我调试过的一款BT601数字机芯为例,它的对外接口典型引脚大致是这样的:

引脚方向说明
PCLK输出像素时钟,上升沿/下降沿锁存数据需确认
D[7:0]输出8位并行视频数据,遵循YCbCr 4:2:2
VSYNC输出帧同步,有的版本可能没有
HSYNC输出行同步,有的版本可能没有
DE输出有效数据指示,高电平期间D[7:0]为有效像素
SCL/SDA双向I2C控制总线
RST输入复位,低有效或高有效需确认
电源/地-通常有5V输入和1.8V/3.3V内核及IO电源

时序参数是调试的基础,但很多时候手册给得不全,需要实测来补。我自己习惯用逻辑分析仪先抓一遍,重点量几个数:

  • PCLK频率:这决定了整个采集链路的工作频率。以640x512@25fps为例,假设一行有效640像素,行消隐和回扫大约再占一倍时间,那一行大约需要1280个PCLK,帧率25fps,PCLK大约是1280×512×25=16.384MHz。如果是384x288@50fps,假设每行总PCLK约768,那么768×288×50≈11.06MHz。BT601机芯的PCLK通常在10MHz到30MHz之间,和分辨率及帧率直接相关。

  • DE高电平宽度:统计一帧中DE累计拉高了多少个PCLK,再数一行内的,基本就能确认实际输出的有效分辨率和你配置的是否一致。我遇到过一次分辨率寄存器写错,导致DE宽度变成两倍的诡异情况,就是靠这个统计发现的。

  • 数据排列:BT.656格式的像素序列是Cb、Y、Cr、Y交替的,也就是每两个Y共享一对CbCr,排列顺序是Cb0 Y0 Cr0 Y1 Cb2 Y2 Cr2 Y3...。如果机芯实际输出的是YCbCr 4:2:2,但你在采集端按照这种排列去拼,拼出来的画面颜色就是对的;一旦顺序搞反,最典型的表现就是画面偏绿或者偏洋红。

2.3 硬件连接的关键细节

硬件连接这部分,外行看起来就是“把线接上”,但里面全是细节。我第一版样板就是因为偷懒没仔细看电气规格,白白烧了一个星期的调试时间。

电平匹配是第一关。BT601数字机芯的IO口绝大多数是3.3V电平,少数老款可能是2.5V或5V,接FPGA或SoC之前必须确认两边电平是否兼容。如果主控IO是1.8V,中间就需要加电平转换芯片,或者选支持1.8V容忍的bank。我一般会在PCB上预留电平转换芯片的位置,调试时用0欧电阻切换,灵活处理。

I2C的上拉电阻也别随便抄。BT601机芯的SCL/SDA上拉,我这边用4.7k比较稳定,但有的模组内部已经加过上拉,外部再接就会导致上拉过强,信号沿变缓、噪声容限下降。最稳妥的做法是先用示波器看边沿,如果上升沿缓得不行,再考虑减小或去掉外部上拉。

信号线布线方面,PCLK和D[7:0]这组线要尽量等长,尤其是PCLK不能比数据线短太多,否则建立时间不够。我用过的几块板子,把时钟线绕了几圈蛇形线来对齐,效果很明显。信号线上预留串联电阻位置也很有必要,一般22到33欧姆的串阻可以有效降低振铃,尤其在机芯和主板通过排线连接的时候。

供电部分更加不能马虎。热成像机芯的模拟前端对电源纹波非常敏感,数字IO的翻转噪声如果耦合到模拟电源上,画面会出现固定条纹,这在红外图像上特别刺眼。我现在的做法是数字电源和模拟电源完全分开,机芯的供电入口再加一级LC滤波,实测画面底噪有明显改善。

3. 初始化配置实操:从复位到图像输出的完整流程

3.1 上电时序与复位

BT601机芯的上电时序在手册里通常只有一小段文字,但没做好就是各种莫名其妙的问题。

我踩过最典型的一个坑:系统上电后马上通过I2C去读写机芯寄存器,结果读回来的ID全是0xFF,整块机芯好像死了一样。后来用示波器测才发现,机芯的电源稳定时间比主控长,I2C操作发出时它还在复位状态里。从那以后我定了一个规矩:上电后至少等200毫秒,确认各路电源稳定,再拉高复位,复位释放后再延时50毫秒以上,然后才开始I2C访问。

具体流程一般是这样:

  1. 先供模拟和数字电源,让电压稳定。
  2. 复位脚保持复位状态,直到电源完全稳定。
  3. 拉高复位,开始计时,等机芯内部初始化完成。
  4. 用I2C读版本寄存器,确认通信正常。
  5. 按需写入配置寄存器,最后发软复位命令让配置生效。

这个顺序是最保险的。如果没有按顺序来,很多寄存器写了不生效,或者机芯处于一个半初始化状态,输出接口没有像素时钟,画面自然就是黑的。

3.2 I2C寄存器配置的通用套路

不同厂商的BT601机芯,寄存器地址定义千差万别,我在这里不可能给出一份完全通用的寄存器表,因为同一个型号名下的不同批次都可能改地址。但根据我接触过的多款数字机芯的经验,寄存器布局有几个常见的区域,可以作为排查和配置的参考框架。

寄存器区域典型作用
0x00~0x0F版本ID、复位控制、总线状态
0x10~0x2F工作模式、输出格式、分辨率/帧率
0x30~0x4F图像增强、AGC、滤波、gamma
0x50~0x6F伪彩、极性、OSD相关
0xF0~0xFF校正表状态、工厂参数

配置的套路其实很固定,只要掌握了思路,换一块机芯也就是查表改地址的事:

  • 第一步,读ID,确认I2C地址和通信没问题。
  • 第二步,写系统软复位,让机芯回到一个已知状态。
  • 第三步,设置输出格式,比如指定为YCbCr 4:2:2并行输出。
  • 第四步,设置分辨率和帧率。
  • 第五步,如果需要,设置图像参数,比如自动增益模式、快门校正周期。
  • 第六步,再次软复位,让参数生效。
  • 第七步,轮询状态寄存器,确认机芯进入正常运行状态。

这里我特别想提醒一点:每次配置完,一定养成回读的习惯。不要写完就默认它生效了,我在项目里遇到过一种情况,寄存器写返回ACK,但实际上由于当时I2C速率过高,某些字节根本没写进去,画面输出停留在默认的低分辨率状态。回读校验能很快筛选出这类问题。

可以用写一个简单的I2C配置脚本,在调试阶段快速验证:

import time import smbus2 bus = smbus2.SMBus(1) ADDR = 0x20 # 示例地址,以机芯手册为准 def read_reg(reg): return bus.read_byte_data(ADDR, reg) def write_reg(reg, val): bus.write_byte_data(ADDR, reg, val) # 1. 读版本 print("ID:", hex(read_reg(0x00))) # 2. 软复位 write_reg(0x01, 0x80) time.sleep(0.05) # 3. 设置输出格式、分辨率、帧率等(示例值) write_reg(0x10, 0x02) # 输出YCbCr 4:2:2 write_reg(0x12, 0x04) # 分辨率档位,具体看手册 write_reg(0x13, 0x01) # 帧率档位 # 4. 软复位使配置生效 write_reg(0x01, 0x80) time.sleep(0.1) # 5. 回读验证 print("Mode:", hex(read_reg(0x10))) print("Res :", hex(read_reg(0x12))) print("FPS :", hex(read_reg(0x13)))

3.3 配置结果的验证方法

寄存器配置完之后,怎么判断它真的生效了?很多人拿示波器量一下PCLK有时钟,就以为万事大吉,但时钟有并不代表数据是正常的。

我的验证步骤一般是这样:

  1. 用示波器或者逻辑分析仪看PCLK频率,先判断是否在当前配置预期的范围内。
  2. 看VSYNC/DE是否存在,频率是否符合帧率预期。
  3. 如果引脚上没有VSYNC只有DE,那就直接统计DE高电平持续时间的PCLK个数,和配置的有效行像素比对。
  4. 在FPGA里加一个简单的统计模块,持续计数一帧内DE高电平数量、一帧总的PCLK数量,把统计结果通过串口或寄存器读出来。

统计模块的思路是这样:定义一个计数器,DE高的时候每个PCLK加1,一个VSYNC周期结束时把计数值锁存,并清零重新计数。这样读出来的数,就是实际有效像素数。我遇到过分辨率配错导致画面只有一半的情况,就是这个统计数最先暴露了问题。

4. 图像采集与显示链路实现

4.1 采集模块的设计要点

如果说初始化配置是让机芯“开口说话”,那采集模块就是让后端平台“听懂”它的话。对FPGA平台来说,BT601数字视频采集的逻辑其实不算复杂,核心就三件事:正确地采数据、正确地切行帧、正确地送走。

我自己常用的一段Verilog采集逻辑骨架大致是这样:

module bt601_capture #( parameter H_ACTIVE = 640, parameter V_ACTIVE = 512 )( input wire clk, // 系统时钟 input wire pclk, // 机芯像素时钟 input wire vsync, input wire hsync, input wire de, input wire [7:0] din, output reg [23:0] rgb_out, output reg rgb_valid ); always @(posedge pclk) begin if (de) begin // 这里根据YCbCr 4:2:2排列,把两个Y和一个CbCr组合成RGB像素 // 实际工程会先做行缓存,再做色度插值和色彩空间转换 rgb_valid <= 1'b1; end else begin rgb_valid <= 1'b0; end end endmodule

在采集端有几点需要特别留意。

像素时钟PCLK不能直接拿来当全局时钟用,最好先通过IBUFG进入全局时钟网络,或者至少做一次BUFG处理,避免因为时钟走线长导致时钟偏斜。

数据采样边沿要确认。有的机芯在PCLK上升沿送数据,有的在下降沿。如果选错边沿,画面不会完全没图像,但会出现竖向的模糊或者边缘噪点。判断方法很简单:用FPGA的在线逻辑分析仪抓一拍数据和DE,然后用不同的采样沿去对比数据的稳定时刻。

行场同步极性也不要想当然。DE是高有效还是低有效、VSYNC是正脉冲还是负脉冲,必须查手册。FPGA内部最好加一个极性和同步参数的寄存器,调试时用上位机去改,不用重新编译综合,能省很多时间。

还有跨时钟域的问题。机芯输出的PCLK和后端系统时钟往往不是同一个域,接入后的数据要先放进异步FIFO或者经过简单的握手处理,再做后续处理。否则在帧率切换或者分辨率切换的时候,很容易出现画面撕裂。

4.2 从YCbCr到RGB再到伪彩与测温叠加

BT601机芯默认输出的色彩格式一般是YCbCr 4:2:2,而后端显示、编码、存储链路,通常需要的是RGB或者BGRA。所以色彩空间转换这步绕不开。

转换公式是固定的,常见的是:

  • R = 1.164 × (Y - 16) + 1.596 × (Cr - 128)
  • G = 1.164 × (Y - 16) - 0.813 × (Cr - 128) - 0.391 × (Cb - 128)
  • B = 1.164 × (Y - 16) + 2.018 × (Cb - 128)

FPGA里实现这个公式,把系数写成定点数,用乘加器做就行。性能上注意查表法和流水线乘法器的区别,热成像分辨率不高,所以资源占用压力不大。

BT601机芯本身往往支持伪彩模式,内置若干条伪彩映射表。但如果你要做更复杂的测温显示,比如把温度范围映射成彩虹色,同时保留温度数据做分析,那伪彩就不能只靠机芯内部了。我的做法是让机芯输出原始的灰度或者Y通道,在FPGA侧用自定义的LUT表做伪彩映射,这样既保持了显示的灵活性,又不会丢掉原始温度信息。

测温叠加是热成像整机最核心的价值点之一。BT601这类数字机芯的温度数据传递方式有两种常见形态:一种是在视频消隐期间把温度数据打包进数据流,另一种是通过额外的接口或寄存器来读取。对于后者,需要注意温度和视频帧之间的对齐。如果温度和画面差了半拍,人眼可能看不出来,但做温度统计和告警时,温度点对应的画面位置就会错位。

4.3 面向无人机与手持设备的工程适配

如果你只是把机芯接在固定设备上,前面那些内容基本够了。但很多项目里的BT601机芯是装在无人机吊舱或手持观测设备上的,这两类场景又有额外的工程坑。

线缆长度和信号完整性是第一个问题。BT601并行信号在长排线下容易受干扰,PCLK频率到20MHz以上,超过二三十厘米的线缆,上升沿就会明显劣化。我在一个无人机项目上把机芯放在云台上,主板在机身里,中间一段软排线,最开始画面时不时闪条,后来把串阻调大、加了一级驱动缓冲,才算稳定下来。如果条件允许,优先选带LVDS输出或同轴输出的机芯,能省掉很多痛苦。

功耗和散热也要提前算。热成像机芯的核心功耗看起来不高,但长时间工作在外场设备里,尤其是不通风的云台舱,温升会直接反映到图像噪声上。有些机芯在温度过高时会自动进入保护模式,降低帧率或者触发快门校正,表现为画面卡顿,再不就是过一段时间后图像变花。这些都是环境设计的问题,不能全归咎于机芯。

手持设备还有一个特殊需求:快速启动。从按电源键到出画面,如果超过五秒,体验就非常糟糕。这时候上电时序和初始化流程就要压缩,比如把一些非关键寄存器的配置放到出图之后慢慢补,优先保证视频输出先亮起来。

5. 常见问题与排查技巧实录

5.1 接上之后完全没有图像

这是最让人崩溃的一类故障,我列一个最常见的排查顺序,按这个顺序走基本能定位绝大多数问题。

排查项方法常见结论
供电是否正常万用表测各路电源电压不对,机芯不启动
PCLK是否有输出示波器测PCLK脚无时钟=机芯没起来
I2C能否读写逻辑分析仪抓总线地址错、上拉问题、时序不满足
复位时序测复位脚与电源时序复位太早或太短
输出是否被配置成待机读取状态寄存器有些机芯默认待机
快门校正状态观察画面校正期间输出全黑或全白

实际操作中最常被忽视的是最后一个:快门校正。很多BT601机芯开机时会自动做一次校正,时间从几百毫秒到几秒不等,期间输出的画面是全黑或者全白。如果你第一次上电就盯着屏幕看,很容易误判为“没有图像”,其实等两秒它就自己出图了。

5.2 花屏、绿屏、图像错位

花屏和绿屏这类问题,十有八九不是机芯坏了,而是采集端的数据组织出了问题。

最常见的原因是数据位顺序接反。BT601机芯的D[7:0]是并行总线,如果主控端把D0接到了D7、D1接到了D6这种交叉,画面上不会是完全乱码,而会出现明显的色彩错乱,细节还在,但颜色完全不对。排查时先确认硬件连接,别一上来就怀疑机芯。

绿屏的问题要特别说明一下。YCbCr 4:2:2里,如果Cb和Cr的顺序反了,或者Y和色度错位了,画面的整体色调会偏绿或者偏紫。出现这种问题,优先检查你的CbCr插值和排列组合逻辑,而不是去调机芯寄存器。

图像错位,比如画面左半和右半拼不上,通常是行同步或者DE的时序没对齐。注意DE信号本身有没有延迟,有些机芯的DE和PCLK之间并不是严格同沿,如果FPGA锁存太激进,数据就会错开一个像素,导致画面整体错位一个点。解决办法是把采样沿向数据稳定的中间时刻偏移,或者做一次打拍对齐。

5.3 帧率偏低、画面抖动

帧率和帧率之间差别很大。BT601数字机芯支持的分辨率和帧率档位一般在寄存器表里写得很清楚,但实际配置时容易犯一个错误:把帧率档位配置成了自动模式。自动模式会根据场景温度自动调整帧率,环境一变,帧率就跟着变,画面就出现一顿一顿的感觉。

另一个常见情况是I2C速率太慢。如果初始化脚本的I2C总线速率在100kHz以下,配置命令又多,整个初始化过程可能持续好几秒。这不会影响最终帧率,但在调试阶段浪费时间。可以先把速率提到400kHz,等所有配置验证通过后再降回去,检查兼容性。

画面抖动还有一种隐藏原因:电源瞬态。机芯耗电虽然不大,但启动瞬间电流冲击不小,如果供电线路压降过大,会导致PCLK周期出现抖动,画面表现为横向的条纹抖动。排查方法很简单,用直流稳压电源给机芯单独供电试试,如果画面稳定了,那就是主板的电源设计问题。

5.4 测温数据读不出来或偏差大

BT601数字机芯如果支持测温,那温度数据通常会通过预留的寄存器读取。测温问题分两类,一类是完全读不出来,另一类是读出来了偏差很大。

完全读不出来,先检查机芯内部是否完成了校正。很多机芯出厂时是不带校正表的,第一次上电或者校正表丢失后,需要先触发一次快门校正,才能在寄存器里读到有效的温度数据。如果一直读不到,还需要看温度输出是否被配置为关闭状态。

温度偏差大,首先要区分是系统偏差还是随机偏差。系统偏差通常是发射率参数、环境温度补偿参数没有设置对。很多支持测温的机芯,寄存器里都有发射率设定项,默认值可能是1.0,实际测量墙面、金属面时,发射率不同,输出温度自然差很多。随机偏差则多和机芯尚未热稳定有关,开机前几分钟温度漂移大是正常的,等一段时间再读取数据会更靠谱。

如果你想做精确标定,黑体辐射源是绕不开的工具。固定距离、固定发射率,设定不同的黑体温度,记录机芯输出,然后做线性修正或者查表修正。这属于测温标定的范畴,接口调试阶段先做到“能稳定读到值、数值随物体温度变化”这一层就很好了。

还有一点在分层设备上特别容易踩坑:温度数据与视频帧同步对齐。如果机芯的温度输出和视频是分开的,两者默认帧率不同步,那存储下来的温度矩阵和视频画面就可能错位。项目里我就在一个巡检机器人的数据记录模块上遇到过,回放历史数据时温度框和实际物体位置对不上,排查了很久才发现是温度和视频的时间戳对不齐。解决办法是在采集端给两类数据统一打帧号,后期按帧号对齐。

6. 一点个人经验

6.1 调试顺序与文档习惯

调试BT601这类接口类项目,最大的经验就是要有一个固定的调试顺序,不要东一榔头西一棒子。我的顺序是:先电源、再时钟、再控制总线、再视频数据。每一层都验证通过,再往下一层走。你以为的“视频数据没问题”,八成是前面哪一层还没真正确认过。

文档习惯也值得一提。每次调试改了什么寄存器、改了什么参数、画面有什么变化,都记录下来。这个项目前后就陆陆续续记录了上百条调试记录,后期回看排查问题,或者换一颗机芯重新适配,翻这些记录比翻手册还有用。寄存器配置每次变更都保存成一个可回溯的版本,配合回读校验代码,能快速定位“上电后某串配置是否真正生效”这类问题。

6.2 几个顺手的小技巧

最后分享几个我自己的顺手技巧,不一定写在技术文档里,但实际用起来是真的省事。

初始化脚本里加一段回读校验逻辑。不要只写寄存器,改完马上读回来比对,不一致就打印报警。这一条在我做批量适配的时候救了我很多次,因为不同批次的机芯,个别寄存器地址会有差异,有了回读校验,一跑脚本就能发现差异点。

调试阶段在FPGA里加一个可实时控制的配置寄存器组,把视频输出的分辨率、帧率、采样沿这些参数做成可在线修改的,不用每改一个参数就重新综合一遍工程,节省的时间是以天来计的。等全部调试稳定之后,再把这些参数固化到正式代码里。

关于FAE给的寄存器建议表,我的习惯是先看默认值,再对照着改。很多人光盯寄存器描述,忽略了复位默认值,结果把某个寄存器的某一位配置反了,和默认逻辑冲突,画面就一直在两个模式之间横跳。先理清楚默认状态,改动才有依据。

做热成像机芯集成这件事,急不来,每一个“看起来很小”的细节,到最后都会变成真实的产品体验差异。接口链路稳了,后面做测温、做智能分析、做网络传输才有地基。希望这篇调机过程对你手上的项目有所帮助。

返回列表