Hi3516CV610开发板实战:IT66021 HDMI音频输入调试全记录(附I2S配置避坑指南)
最近在做一个智能显示终端的项目,核心板用的是海思的Hi3516CV610。项目有个需求,需要设备能接收来自HDMI接口的音频信号。听起来是个标准功能,对吧?但真上手调试,尤其是用那颗IT66021 HDMI接收芯片来获取I2S音频数据时,才发现从硬件引脚到软件驱动,再到应用层采样,每一步都可能藏着“惊喜”。如果你也正在和类似的嵌入式音频输入难题较劲,特别是涉及海思平台与外部音频编解码芯片的对接,那这篇从实际项目里“抠”出来的调试笔记,或许能帮你省下不少查资料、看寄存器、反复编译烧录的时间。
这篇文章不会只给你一个干巴巴的修改列表。我会把整个调试链路拆开,从硬件连接确认、内核驱动加载,到MPP中间件配置、示例程序修改,最后到音频数据的验证,把每个环节的原理、可能遇到的坑以及我的解决思路都捋清楚。目标读者是已经有一定嵌入式Linux开发经验,正在或即将进行海思平台音频子系统开发的工程师。我们会聚焦于Hi3516CV610与IT66021这对组合,但其中关于I2S主从模式、音频通路配置、环境变量设置等问题的排查方法,具有相当的普适性。
1. 硬件与基础环境确认:调试的起点
在动手修改任何一行代码之前,确保硬件连接和基础软件环境是正常的,这是避免后续调试方向性错误的关键。很多“诡异”的问题,根源往往在这里。
1.1 硬件连接与引脚复用检查
Hi3516CV610通过I2S接口与IT66021芯片通信。首先,你必须确认开发板的原理图,明确使用的是哪个I2S控制器(例如I2S0, I2S1)以及对应的数据(SD)、时钟(SCLK)、左右声道时钟(LRCK)和主时钟(MCLK)引脚是否已正确连接。
更重要的是引脚复用(Pin Mux)配置。海思芯片的引脚功能非常灵活,一个物理引脚可能被复用于GPIO、UART、I2C或I2S。如果引脚复用寄存器没有配置为I2S功能,那么软件再怎么配置都是徒劳。
通常,引脚复用配置在板级支持包(BSP)的 pin_mux.h 和 pin_mux.c 文件中。你需要找到对应你所用I2S控制器的宏定义和初始化代码。例如,如果你使用I2S1,可能需要确保类似下面的定义和代码存在:
// 在 pin_mux.h 中启用I2S1
#define I2S1_EN 1
// 在 pin_mux.c 的相应初始化函数中,配置相关寄存器
// 这通常是一系列 `himm` 写操作,将特定引脚组设置为I2S1功能
修改这些文件后,需要重新编译内核模块(通常是 sys_config.ko)并加载,才能使配置生效。一个常见的操作流程是:
# 进入内核或驱动编译目录
make clean
make
# 将生成的 sys_config.ko 拷贝到开发板,并重新加载
insmod sys_config.ko # 或使用提供的加载脚本
注意:不同开发板厂商提供的BSP可能封装程度不同。有些可能通过菜单配置工具(如
menuconfig)来设置引脚复用,有些则直接修改源文件。务必参考你手头开发板的配套文档。
1.2 内核驱动与设备节点
IT66021通常需要一个内核驱动来管理。这个驱动负责芯片的初始化、状态读取,并为上层应用提供一个标准的设备节点(如 /dev/it66021drv)进行控制。
首先,检查驱动是否已编译进内核或作为模块存在:
# 查看内核配置
cat /proc/config.gz | gunzip | grep IT66021
# 或查看已加载模块
lsmo

&spm=1001.2101.3001.5002&articleId=153545646&d=1&t=3&u=444ced756a334220b071cfe3165dd99f)
465

被折叠的 条评论
为什么被折叠?



