ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ADRV9026从TES到目标板:ARM bin与JESD204C配置导出全攻略

ADRV9026从TES到目标板:ARM bin与JESD204C配置导出全攻略 很多人的第一块ADRV9026评估板都是在TES GUI里一点点点出来的。频率设好、增益拉满、在频谱仪上看到一个漂亮的发射窗口于是觉得链路已经通了。直到你换了目标板或者想把整套配置搬进一个没有电脑、没有GUI、只有ARM和FPGA的盒子里上电自启才会猛然发现TES里的一堆设置不导出成可加载的ARM bin、不整理成一份JESD204C配置文件断电之后一文不值。这篇文章不讲射频指标怎么调优而讲一个工程交付里绕不开的动作把你在评估板上在线调试好的状态转成两种能够进入目标系统自动执行的产物——ARM bin和JESD204C配置文件。ARM bin里装的是ADRV902x内部寄存器的完整初始化序列JESD204C配置文件则记录了FPGA与射频芯片之间高速串行链路的全部参数。适合正在用ADRV9025/ADRV9026做评估的硬件工程师、FPGA工程师和嵌入式软件工程师。我尽量把每个动作背后的“为什么”也一起讲清楚而不是只给一份点击清单。1. 为什么评估板上的“能跑”还不能算“可用”bin和配置文件到底补了什么1.1 在线调试链路与交付态之间的落差先用一个最直观的场景来说。我们把ADRV9026评估板插在Xilinx ZCU102上用USB线连到电脑打开TES软件。此时PC通过USB转SPI/I2C的通道可以直接读写ADRV9026的寄存器。你在界面上拖动频率、开关发射通道、跑一遍校准所有寄存器写入都是实时的。这套模式是ADI评估硬件时最舒服的状态所见即所得调坏了重启再连几乎无成本。但到了真实产品里目标板往往没有电脑也没有TES。板上可能是Zynq、可能是其他厂牌的ARM SoC甚至是一颗裸奔的ARM Cortex-M。系统上电后必须由这段程序自己完成射频芯片的初始化先配IO口再通过SPI把一堆寄存器按顺序写进去中间还要插入延时、判断状态位、触发校准最后把JESD204C链路拉起来。这些工作如果每次都在现场手动敲命令行或重新点GUI不仅效率低而且不同板子之间容易出现“配置漂移”——上一块板调好的参数下一块又不完全一致了。这里就引出了导出bin的原始动机把在线调试时那一整套寄存器写入时序和状态判断逻辑固化成一个二进制映像由目标板上的ARM在启动阶段按顺序执行。它相当于把TES里你点过的每一项操作录制成一份可重复播放的脚本让芯片在上电后不需要任何上位机就能进入你调好的状态。这也是评估板“能跑”和产品“能用”之间的关键分水岭前者依赖PC和人工后者依赖固件和自动加载。1.2 ARM bin和JESD204C配置分别承担哪一部分职责很多刚接触ADRV902x的人容易把ARM bin和JESD204C配置文件混为一谈觉得导出一个文件就够了。实际上两者职责不同而且在软件栈里各走各的路径。ARM bin解决的是“射频芯片如何被初始化”的问题。它包含了芯片上电顺序、SPI寄存器读写序列、校准触发、时钟使能、GPIO状态等。目标板只要把它加载到内存里按照规定的入口地址开始执行ADRV9026就会在一个可控的过程里完成初始化。你可以把它理解成射频芯片的“开机启动脚本”。JESD204C配置文件解决的是“FPGA与射频芯片之间如何对齐”的问题。它描述的是链路层参数lane数、lane速率、每帧octet数、多帧帧数、SYSREF工作模式、确定性延迟的设置等。这个文件不是给射频芯片自己用的而是给FPGA工程里的JESD204C IP核用的。FPGA工程师拿到这个配置才知道怎么搭IP怎么接参考时钟怎么设置期望的多帧边界从而保证收发两端数据帧对齐。两者都有整套系统才能闭环。只有ARM bin没有JESD204C配置FPGA端无法知道该用几根lane、跑多高速率只有配置文件没有ARM bin射频芯片连初始化都完不成。所以我在实际项目里会让这两个文件成对出现并且给它们命名时带上工程版本号和日期防止联调时拿错版本查了半天都不知道问题出在哪。2. 硬件连接、软件版本和上电顺序这三件事若不同步后面全是白做2.1 评估板与载板的常见接法先过一遍硬件环境。ADRV9025/ADRV9026评估板典型搭配是Xilinx ZCU102或者ZC706这类带FMC接口的载板。连接时要注意FMC插座的防呆朝向我见过不止一次有人把子卡放反结果一上电FMC附近的电源指示灯异常虽然大概率不会烧毁但排查起来非常浪费时间。硬件连接上除了FMC还必须接USB线到评估板上的FTDI USB-UART口。这个串口有两个作用一是给TES提供连接通道二是输出ARM运行时打印的调试日志。有人只接了FMC回头发现TES连不上设备就是因为漏了USB线。电源方面评估板一般需要用12V直流电源单独供电而不是靠FMC从载板取电。上电前确认电流余量特别是要跑满功率发射的时候电流波动会很明显。我第一次调的时候用了一个额定电流偏小的电源结果一开发射链路板子直接掉电重启折腾了半小时才发现是电源带不动。2.2 HDL、Linux驱动、TES三者版本匹配是最大的隐性坑ADI这套评估系统的软件栈比一般芯片的SDK要复杂一些大致分三层HDL层Vivado工程、内核驱动层Linux下的一组驱动、应用层TES GUI。如果你用的是从GitHub上直接拉的Linux源码和HDL仓库再叠加一个官方最新版TES三层之间时常会出现版本不匹配。版本不匹配的表现很迷惑不是直接报错而是“看起来能通信但行为不对”。我整理了几个典型症状典型症状真正原因TES能连上但器件ID读出来是0x0或0xFFFFHDL工程里SPI寄存器偏移与驱动版本不一致初始化后电源监控报电压异常驱动里上电序列配置与板卡硬件版本不匹配配置LO后校准一直卡在timeoutTES内置固件与板上加载的ARM镜像不是同一套JESD204C链路能Up但PRBS数据错乱HDL中JESD204C IP模式与TES里配置不一致针对这种情况我建议不要盲目追求组件全部最新。ADI Wiki上通常会给一组经过验证的组合版本比如某个HDL版本对应哪个Linux内核版本、哪个TES版本照着这个组合去搭最省心。如果项目里已经有锁定的版本那就把TES也锁到同一时期宁可用旧一点的TES也不要在联调中途升级。2.3 参考时钟、SYSREF和上电顺序再往上电时序。ADRV9026的初始化对时钟顺序非常敏感尤其是第一次从ARM bin启动的时候。正常流程应该是电源稳定然后给出参考时钟CLKIN再释放器件的复位最后执行配置序列。如果你的目标板是先跑ARM代码、后给时钟校准时常会出现偶发失败而且不是每次都复现非常讨厌。我在自己的板子上吃过这个亏因为FPGA配置里的时钟使能脚晚了一个时钟周期导致前几次上电有概率出现LO泄漏校准不通过。SYSREF则是JESD204B/C里同步那一环的关键信号。在Subclass 1模式下SYSREF与器件时钟之间的相位关系必须满足确定性要求否则整个链路的确定性延迟无从谈起。如果你用的器件时钟和SYSREF来自同一个PLL通常问题不大如果是两个独立时钟源就必须认真看时序约束这一块往往需要示波器实测两个信号上升沿之间的相对延迟。很多“链路Up了但数据全乱”的问题最后都追到了SYSREF上。3. TES里一套完整的射频配置操作照着点基本不会丢配置3.1 从连接设备到加载参考工程当硬件连接好、版本匹配也确认完了就可以打开TES开始正题。进入TES后先选择连接方式。一般情况下从设备列表里能看到对应的串口选对之后点Connect。连接成功左侧工作区会列出ADRV9026的树形结构包含Rx、Tx、ORx、DPD等节点。如果你看到这里显示Unsupported Device基本可以确定是固件或版本问题先回去查版本组合。连接正常后我习惯先File Open载入官方参考工程。官方会提供一些预设的profile比如针对ZCU102 ADRV9026的典型配置。从参考工程开始改比自己从空白工程一步步搭要快得多也好排查。这里想特别提醒一点如果之前做过项目建议保留一份自己的模板工程文件而不是每次都从官方默认配置开始。模板里通常已经包含了常用频段的校准设置和你团队的命名习惯能省不少时间。3.2 射频参数设置与校准接下来是频谱和链路的设置。比如我的评估场景是3.5GHz中心频点、200MHz信号带宽那就在全局配置里把LO设为3.5GHz参考时钟按板上的实际频率填写。发射和接收路径分开配置发射要留意衰减值和DSA设置接收要确定是AGC模式还是手动增益模式。这些参数对最终EVM影响很大但都属于射频调试范畴这里不展开。关键是校准这一步。在设置完参数后务必运行完整的校准流程至少包括Filter Calibration、Tx QEC、Rx QEC、Tx LO Leakage Calibration。每项校准都有它的意义比如Tx LO Leakage校准是为了抑制本振泄漏如果不跑发射信号在频谱仪中心频点会拱起一个很大的尖峰。如果你发现校准状态里有个别项红了先不要急着重新跑一遍。停一下检查参考时钟是否稳定、电源是否有波动、FPGA复位是否释放很多时候校准失败的原因并不在校准算法本身而在外围条件。3.3 确认JESD204C链路状态后再导出校准跑完之后进到JESD204C相关的页面。这里能看链路参数是否已经协商好SYSREF有没有采集到FSYNC是否正常以及链路是不是处于Up状态。我在这一步会花两分钟做一次完整确认先看校准结果全绿再看JESD204C状态显示正常最后在频谱仪确认输出符合预期。只有这三项都通过了我才会考虑导出。原因很简单导出只是把你当前的状态“拍照存档”如果你现在就是错的导出来的bin自然也是错的而且更麻烦的是你可能在目标板上花了很久才意识到这一点。不要指望导出能帮你把链路“修好”导出只是一个固化工具不是调试工具。4. JESD204C页面从采样率到lane rate的换算参数含义逐项讲清4.1 JESD204C与JESD204B的关键差异ADRV902x这一类芯片串行数据口支持JESD204B和JESD204C两种模式。很多从JESD204B时代过来的工程师刚开始看JESD204C都会觉得只是速率变高了其实差异不止于此。JESD204B的lane速率天花板大概在12.5Gbps而JESD204C把它推高了设计目标甚至支持到32Gbps级别。为了在高lanerate下保证误码率JESD204C加入了新的扰码方案和前向纠错选项链路协商的机制也更复杂。另外一个重要的变化是JESD204C里同步方式对SYSREF质量的要求更高因为多片器件同步时SYSREF的边缘需要更精准地落在确定性延迟窗口内。换句话说JESD204C在物理层上的“余量管理”比B版本严格得多。对ADRV9026而言JESD204C不是用不用的问题而是你要选哪种链路速率、哪种编码模式去匹配下游FPGA。如果你的FPGA端IP核只支持JESD204B那即使芯片本身能跑204C你也只能在B模式下工作。所以第一步并不是直接去选最高速率而是先确认FPGA端能力。4.2 L/M/F/S/K这些参数到底怎么理解每个第一次接触JESD的人都会被这一串参数绕晕。我的经验是先抓住本质JESD204链路做的事情就是把多个ADC/DAC转换器的数据按某种规则分到多条高速lane上然后在接收端再还原回来。L/M/F/S/K就是这套分配规则的“分词法”。M代表转换器数量。对于ADRV9026的四发四收场景M通常等于4。L代表lane的数量。lane越多每条lane上的速率越低但FPGA布线压力和引脚占用也越大。F表示每帧里每个lane上承载的octet数S表示每个转换器在每帧里的sample数。Np代表实际传输位宽一般取16。K表示一个多帧里包含多少帧这个参数直接影响同步和确定性延迟窗口的大小也是FPGA端对齐的关键。lane rate怎么估在JESD204B的8b/10b编码下常用近似公式是lane rate ≈ 采样率 × Np × M / L × 10 / 8。举个例子采样率245.76MSPSNp16M4L4那么原始数据率就是245.76×16×4/43932.16Mbps再乘上10/8的编码开销得到约4.9152Gbps也就是一根lane上实际的线速率。这个值可以作为FPGA IP核配置的起点。JESD204C如果采用64b/66b编码开销比例又会不同具体以IP核计算出来的结果为准。这个公式不需要背得很紧但它能帮你判断参数之间的联动关系L从4改成8单lane速率会降低一半采样率翻倍lane rate也会跟着翻倍。当你看到TES生成结果发现lanerate和预期差得很远时先回头检查这些基本参数是不是填错了。4.3 一个可以直接填的示例配置下面是一个我用过的示例配置场景是ADRV9026同时跑四个收发通道。你可以拿这份参数到TES里对照一下不必完全照抄但能帮你直观理解参数之间的关系。参数取值说明参考时钟 REF_CLK122.88 MHzADRV9026的参考频率转换器采样率245.76 MSPSADC/DAC采样频率M44个转换器L44条高速laneNp16传输位宽16 bitF4每帧每lane约4个octetS1每转换器每帧1个sampleK32多帧包含32帧估算lanerate4.9152 Gbps按8b/10b编码估算这份配置中SYSREF采用Subclass 1模式同步信号由与参考时钟同源的PLL提供保证确定性延迟。当你把这组参数拉进FPGA工程时IP核里要设置的也是这些值。两边必须严格一致lane数、采样率、每帧octet数、多帧大小任何一个不同链路都可能起不来或者起来后数据无法对齐。5. 导出ARM bin与JESD204C配置文件操作细节、产物落到哪、以及怎么交叉验证5.1 导出前后要做的三步确认配置和校准都完成之后就可以进入导出的环节。这一步看似简单但我觉得导出前花三分钟做确认是值得的因为导出这个动作本身不会校验你当前的状态是否合理。第一步确认校准状态仍然是全绿。如果中间切换过频段或者修改过任何链路参数校准结果可能已经被清除这时候导出会把一个“未校准”的状态固化下来。第二步确认当前设备型号和参考工程确实对应你的目标板。比如你是为ZCU102工程导出的就不要用ZC706的工程导出因为FMC引脚和时钟分配都不同。第三步导出路径不要有中文和空格ARM下载器或后续脚本在解析路径时遇到中文有时会出一些很诡异的问题没必要给自己埋这个雷。导出时我一般在TES里选择Export相关选项。不同版本的TES具体菜单位置略有差别但一般会出现生成ARM二进制文件和导出JESD204C配置文件这两类选项。有些版本还把校准结果单独列为一个文件需要你勾选是否将校准结果包含进bin中这个选项一定要看清楚不然容易埋下第六章要讲的第四个坑。5.2 导出产物长什么样导出的目录一般会包含下面几类文件我习惯把它们放在一个带版本号和日期的文件夹里export/ ├── adrv9026_arm.bin # ARM可加载二进制 ├── adrv9026_jesd204c.json # JESD204C链路描述 ├── adrv9026_reg_config.txt # 寄存器配置清单给人读的 └── adrv9026_calibration.bin # 校准结果如果勾选了固化的话ARM bin是给目标板ARM执行的加载方式通常是在BootLoader阶段把它读进内存然后跳转到指定地址运行。JESD204C配置文件是给FPGA工程师看的里面记录了lane参数、时钟关系、SYSREF设置等。很多人只拿走bin忽略了JSON等到FPGA那边联调时才说缺文件。所以这两个文件从一开始就该作为同一份交付物同时给出。5.3 用二进制和文本双重交叉验证导出完成后我建议不要直接拿去加载先做一次简单的交叉验证。打开adrv9026_reg_config.txt搜一下LO频率、参考时钟、lanerate这几个关键值确认与你在TES里设置的预期一致。这个小动作通常几秒钟但能过滤掉导出选项选错等低级问题。更严格一点的做法是把生成的bin再用十六进制工具打开粗略看一遍内容分布。如果整个文件都是重复的0x00或0xFF几乎可以断定生成失败了常见原因是导出时仪器处于异常状态重新连接后再次导出即可。也可以把bin重新加载回TES的虚拟设备做一次回读对比。这个操作稍微复杂一点但很有效在线状态是一套寄存器值bin加载后的状态应该是同一套寄存器值两者对比能发现是否少写入了一步操作。如果发现不一致多半是TES版本里某些“非易失性设置”没有被固化进bin这时就要查导出选项是否有遗漏。6. 加载ARM bin前必查的四个细节以及我在实测中遇到的怪现象6.1 第一个坑SPI访问模式与字节序不匹配我踩过的第一个深坑出现在新做的ARM板子上。当时用SPI1接口驱动ADRV9026从代码上看初始化序列也执行了芯片的电源也都正常但无论如何回读不到芯片ID。一开始怀疑焊接问题后来才发现是SPI传输模式不对。ADRV9026支持三线和四线SPI模式还涉及比特序是MSB-first还是LSB-first。因为评估板走的是四线模式且MSB-first而我的ARM SPI控制器默认工作在CPOL/CPHA完全不同的一组参数下导致每一笔寄存器写入的bit对齐都错位了。芯片自然没有任何期望的响应。这个问题并不难修只要把控制器参数改成与芯片要求一致ID就立刻读出来了。但我花了整整半天才意识到问题不是硬件焊接而是协议模式不一致。建议在加载完整ARM bin之前先用一个最小的SPI读写测试驱动只做两件事写一个寄存器回读ID。这一步通过了再加载完整bin排查起来会清晰很多。6.2 第二个坑JESD204C链路看着是Up的数据却是错乱的相比SPI问题JESD204C链路的问题更隐蔽。现象是FPGA侧报告链路已经UpSYSREF也捕获到了但抓出来的数据永远是乱的或者偶尔能解出正确帧头、下一帧又错。第一次遇到这种问题我甚至怀疑是FPGA工程代码的bug后来才发现是FPGA工程里JESD204C IP核配的lane数与bin里不一样。原因并不复杂ADRV9026的bin按4条lane配置生成而FPGA工程里新建IP核时我多勾了两根lane变成了8lane模式。链路物理层在8lane模式下依然能建立连接但数据映射完全对不上于是出现“Up了但数据全乱”的怪现象。这个问题的排查看似复杂其实只要把两边参数拉出来逐项对比就能发现。排查顺序建议先确认FPGA IP核里的参数与JESD204C配置文件里的参数完全一致再确认SYSREF时延最后再考虑物理层信号质量。不要上来就怀疑SerDes眼图JESD204C的参数不匹配比物理层问题的概率高得多。6.3 第三个坑版本漂移导致bin格式不兼容另一个让我印象深刻的坑是版本漂移。项目前期用某个版本的TES生成了bin后面我为了修一个bug换了新版本TES重新导出了bin。结果拿到现场目标板的BootLoader直接报“unsupported payload”。两边都没有做任何改动就是bin解析不了。后来查下来新版本TES生成的bin格式在文件头和payload组织上都有变化而目标板上的BootLoader解析逻辑还是旧版的解析到新格式时直接拒绝执行。这件事之后我在交付文件里都会写一个README说明TES版本、HDL版本、Linux驱动版本并强烈建议团队里生成固件的人不要频繁更换TES版本。如果目标板BootLoader是定死的就锁死对应的TES版本升级要联合测试。6.4 第四个坑校准结果没有固化进bin最后一个坑表面上看最奇怪同一个工程文件在线模式下EVM和频谱都很好换了目标板加载bin之后杂散变大EVM劣化一截。一开始我以为是目标板电源噪声比评估板差换了几种电源方案都改善不明显。直到把导出选项里一个叫“include calibration results”的复选框勾上重新生成bin之后目标板上的EVM才回到和在线调试相当的水平。原因是在我用的TES版本里默认导出并不会自动把校准补偿量写进bin需要手动勾选或者单独烧录一个calibration文件。所以加载顺序要严格先加载基础ARM bin再加载校准文件如果单独存在最后配置JESD204C链路参数。三条缺一不可顺序反了也会出问题。以后凡是遇到“在线行、离线不行”的EVM问题第一反应先去查校准数据有没有真正进到目标板。我自己在同时维护射频端和FPGA端的过程中这些坑每个都踩过不止一次。经验多了之后反而形成了一套固定的检查顺序先SPI再校准再JESD204C参数一致性最后才是波形质量。如果你刚开始接触ADRV902x建议先把评估板在TES里彻底玩明白再考虑导出如果你已经到了“在线正常、离线茫然”的阶段回头按这几个点排一遍大概率能找到原因。bin和配置文件说到底只是载体真正要交付的是那一整套被你验证过的、能脱离电脑自动运行的启动流程。
返回列表