1.项目概述
1.1技术背景
米尔MYD-YT153开发板搭载全志T153处理器,提供LocalBus(LBC)并行总线接口,适合连接高速外设。AD7616是ADI公司推出的16位高精度并行ADC,具有16通道差分输入,广泛应用于工业数据采集、仪器仪表等领域。
1.2项目目标
● 验证米尔MYD-YT153 LocalBus与AD7616的硬件兼容性
● 提供完整的软件驱动实现方案
● 评估系统在实际应用中的性能表现
图 米尔基于全志T153核心板及开发板2.硬件平台架构
2.1核心硬件组件
|
组件 |
规格 |
备注 |
|
主控板 |
MYD-YT153MX-512N512D |
T153处理器,512MB RAM |
|
ADC模块 |
AD7616 16位并行ADC |
16通道差分输入 |
|
接口 |
J23 LocalBus接口 |
1对1连接 |
|
调试接口 |
Type-C转USB |
串口调试 |
|
网络接口 |
RJ45 |
可选,与LBC冲突 |
图 MYD-YT153开发板和localbus接口2.2硬件连接要点
● 引脚一一对应:AD7616模块通过J23接口直连开发板
● 电源连接:需外接5V电源至模块供电引脚
● 信号完整性:并行总线长度应尽量短,避免信号衰减

图 J23 localbus接口定义
图 MYD-YT153接入AD7616模块2.3引脚冲突注意
T153处理器的LocalBus与RGMII2网络接口存在引脚复用冲突:
● 必须选择编译支持LocalBus的镜像(LVDS或DSI显示配置)
● 同一时间只能使用一种功能
图 Localbus与RGMII2冲突3.软件环境配置
3.1镜像选择
根据存储介质选择相应镜像:
|
存储介质 |
显示接口 |
镜像文件 |
|
EMMC |
MIPI-DSI |
myd_yt153_emmc_dsi.img |
|
EMMC |
LVDS |
myd_yt153_emmc_lvds.img |
|
NAND |
MIPI-DSI |
myd_yt153_nand_dsi.img |
|
NAND |
LVDS |
myd_yt153_nand_lvds.img |
|
SD卡 |
MIPI-DSI |
myd_yt153_sdcard_dsi.img |
|
SD卡 |
LVDS |
myd_yt153_sdcard_lvds.img |
注:所有镜像均支持LocalBus功能。
3.2驱动架构
4.AD7616工作模式解析
4.1测试代码是否能正常工作
直接运行代码,看下是什么现象
图 Lbc_ad7616_test程序运行结果可以看到一共分三部分
模式设置,设置了SEL[0-2]以及CS0片选,做了寄存器映射。
寄存器设置,针对0x02,0x04…0x27先写后度。
获取结果,读取每路通路结果,小数点后两位。
4.2AD7616模块分析
结合芯片手册《ad7616.pdf》和软件源码 lbc_ad7616_test.c
图 程序运行流程图init_gpio 设置了GPIO_CH_SEL0 , GPIO_CH_SEL1,GPIO_CH_SEL2 都为0,结合手册可以看到这是通路选择管脚,当软件模式时需要设置为0x000。
图 CHSEL寄存器AD7616_Set_Range(Range_0_V) 里面设置RANGE_SEL0 和 RANGE_SEL1 为0,结合手册,发现时设置的软件模式.
图 RNGSEL模式寄存器map_shared_reg_region 和 map_chip_region 都是为了读写寄存器做内存映射。
run_ad7616_test 测试代码关键,它一共分两部分,初始化寄存器和读数据。
图 adc写寄存器和获取结果流程通过查询寄存器可以得到如下信息
adc_cmd_write_readback(ctx, i, 0x2, 0x60);
同样方式,进行总结
|
写入寄存器值 |
设置值说明 |
含义说明 |
|
0x2, 0x60 |
bursten=1 seqen=1 |
使能Burst 模式 使能Sequencer 模式 |
|
0x4, 0xaa |
[7:6]V3A=0x10 [5:4]V2A=0x10[3:2]V1A=0x10 [1:0]V0A=0x10 |
V3A~V0A电压范围设置成+-5V |
|
0x5, 0xaa |
[7:6]V7A=0x10 [5:4]V6A=0x10[3:2]V5A=0x10 [1:0]V4A=0x10 |
V7A~V4A电压范围设置成+-5V |
|
0x6, 0xaa |
[7:6]V3B=0x10 [5:4]V2B=0x10[3:2]V1B=0x10 [1:0]V0B=0x10 |
V3B~V0B电压范围设置成+-5V |
|
0x7, 0xaa |
[7:6]V7A=0x10 [5:4]V6A=0x10[3:2]V5A=0x10 [1:0]V4A=0x10 |
V7B~V4B电压范围设置成+-5V |
|
0x20, 0x00 |
[8]SSREN=0 [7:4]BSEL=0 [3:0]VSEL=0 |
表示在完成V0A/V0B通道对的转换后,ADC 会继续前进到序列堆栈的下一层。 |
|
0x21, 0x11 |
N/A | |
|
0x22, 0x22 |
N/A | |
|
0x23, 0x33 |
N/A | |
|
0x24, 0x44 |
N/A | |
|
0x25, 0x55 |
N/A | |
|
0x26, 0x66 |
N/A | |
|
0x27, (0x77 | 1 << 8) |
N/A |
总结一下就是设置burst模式和启用Sequencer模式,±5V量程。
好了,接着看测试逻辑 发送一次 CMD_SET_CONVST_IO 后,开始读取每个通道的值
这个逻辑就比较清晰了,16个通道轮询方式读取,然后判断最高位是否是1还是0做区别,最后做一个5V量程转换后输出小数点后2位。
结合上面寄存器分析,量程处理代码比较随意,应该要把2.5V,5V,10V 用宏控制,并和量产转换形成对于关系。
那么它的实际精度是多少,作为一个16bitADC,理论精度是−32768 ~ +32767
当 sample_range = 5(±5V)时:
满量程:10 V
码值范围:65536 个码
1 LSB = 10V / 65536 ≈ 0.0001526 V
也就是:
≈ 152.6 µV / LSB
那释放一下它的精度,不在控制输出,把%6.2f改成%f即可。
printf(“tsa: %p ch: %2d, data:0x%04x, voltage: %fn”, tsa, ch, data[ch], voltage_data);
接下来就涉及另一个问题,采样率到底是多少,其实就统计一下每秒这个读取测试次数就知晓
最后统计出来每秒15帧,那肯定不是真实水平,清空所有打印再试试
此时可以看到每秒有接近9000次,由于每次采样通道16,9000×16 = 144,000 samples / second,相当于单通道 144kSPS水平。
5.总结
通过本次测试,得出以下结论:
1.精度验证:AD7616在±5V量程下实际分辨率达到152.6 µV,满足16位ADC标称性能。
2.速率验证:系统实际采样率达到144 kSPS(单通道等效),虽未达到理论极限250 kSPS,但已满足大多数应用需求。
3.优化效果:通过减少软件开销,性能提升显著,证明系统瓶颈主要在软件层面。
4.实用价值:MYD-YT153 + AD7616组合为嵌入式高速数据采集提供了经济高效的解决方案,适合工业自动化、测试测量等应用。
<!-- 非定向300*250按钮 17/09 wenjing begin -->
<!-- 非定向300*250按钮 end -->
</div>