1. Hi3519芯片开发中的Uboot管脚复用配置解析
作为一名长期从事海思芯片开发的工程师,我在实际项目中经常遇到需要调整Uboot管脚复用配置的情况。以Hi3519DV500为例,管脚复用配置的正确选择直接影响着整个系统的启动和运行。下面我将详细解析这一过程,并分享一些实战经验。
在Hi3519DV500开发中,管脚复用配置文件的选择主要通过修改SDK中的Makefile实现。具体路径位于:
code复制/Hi3519DV500_SDK_V2.0.1.0/smp/a55_linux/source/bsp/Makefile
这个Makefile中有两个关键变量需要关注:
- BOOT_MEDIA:决定启动介质类型(emmc或spi)
- REGBIN_XLSM:指定使用的管脚复用配置文件路径
2. 管脚复用配置文件的选择方法
2.1 启动介质配置
在Makefile中,BOOT_MEDIA变量用于设置启动介质类型。常见配置如下:
makefile复制BOOT_MEDIA := emmc # 或者spi_nor/spi_nand
这个设置会影响Uboot的编译选项,进而决定系统从哪种存储介质启动。在实际项目中,我建议在Makefile中明确注释每种启动方式的适用场景,例如:
makefile复制# emmc - 用于板载eMMC存储
# spi_nor - 用于SPI NOR Flash
# spi_nand - 用于SPI NAND Flash
BOOT_MEDIA := emmc
2.2 管脚复用文件配置
REGBIN_XLSM变量则指向具体的管脚复用配置文件。例如:
makefile复制REGBIN_XLSM := tools/pc/boot_tools/Hi3519DV500-DMEB_6L_T_DDR4_2666M-2GB_16bitx2-A55_1G.xlsm
这个.xlsm文件实际上是一个Excel宏文件,包含了所有管脚的复用配置信息。在实际操作中,我发现有几点需要特别注意:
- 文件路径是相对于bsp目录的,不需要写完整路径
- 文件名通常包含开发板型号和内存配置信息,选择时务必匹配硬件设计
- 修改后需要执行
make clean再重新编译,否则可能不会生效
3. Hi3519与Hi3516的配置差异分析
在Hi3516平台上,不同的启动介质(如emmc和nand flash)通常需要使用不同的管脚复用配置文件。这是因为:
- 不同存储介质的控制器可能映射到不同的管脚
- 上电时序和初始化流程可能有差异
- 硬件设计上可能需要不同的上拉/下拉配置
然而在Hi3519DV500上,我们发现一个有趣的现象:无论是emmc还是spi启动,似乎都使用同一个管脚复用配置文件。这可能有以下几种解释:
- Hi3519可能采用了更智能的管脚复用机制,在Uboot阶段动态配置
- 两种启动方式涉及的管脚在硬件设计上已经做了兼容
- 关键启动管脚在芯片内部已经固定,不依赖外部配置
重要提示:虽然看起来使用同一个配置文件,但实际项目中我建议还是检查具体硬件设计。有些情况下,厂商可能只是暂时使用了同一份配置文件,后续版本可能会区分。
4. 管脚复用配置的实战经验
4.1 配置文件修改流程
当需要修改管脚复用时,建议按照以下流程操作:
- 备份原始.xlsm文件
- 使用Excel打开文件(需要启用宏)
- 在"PinMux"工作表中查看和修改配置
- 保存后,在Linux环境下使用配套工具转换为二进制格式
- 更新Makefile中的REGBIN_XLSM变量
- 执行
make clean && make重新编译
4.2 常见问题排查
在实际项目中,我遇到过以下几种典型问题及解决方法:
-
编译时报错"xlsm not found"
- 检查文件路径是否正确(相对路径基于bsp目录)
- 确认文件名没有拼写错误
- 确保文件权限可读
-
管脚功能不正常
- 确认.xlsm文件中该管脚的复用设置正确
- 检查硬件原理图,确认没有冲突
- 使用
himm工具在Uboot中读取寄存器值验证
-
启动失败
- 确认BOOT_MEDIA设置与硬件匹配
- 检查启动管脚(如BOOT_SEL)的配置
- 对比正常工作的配置差异
5. 深入理解管脚复用机制
5.1 寄存器配置原理
Hi3519的管脚复用实际上是通过配置一系列寄存器实现的。每个管脚通常有:
- 复用功能选择寄存器(选择GPIO/UART/I2C等)
- 上下拉配置寄存器
- 驱动能力设置寄存器
- 施密特触发器使能寄存器
.xlsm文件最终会被转换为这些寄存器的配置值,并在Uboot初始化阶段写入。
5.2 动态配置的可能性
虽然大部分管脚复用配置在Uboot早期就固定了,但某些管脚确实可以在运行时重新配置。这解释了为什么Hi3519可能对不同的启动介质使用同一份配置文件 - 关键启动管脚在早期配置,其他管脚可以在Uboot后期或内核中重新设置。
6. 针对特定外设的配置示例
以配置I2C3用于IMX415摄像头为例,需要在.xlsm文件中:
- 找到I2C3相关的管脚(通常是SCL和SDA)
- 设置复用功能为I2C模式
- 根据硬件设计配置合适的上下拉
- 设置合适的驱动能力(摄像头一般需要较强驱动)
具体在Excel中的修改位置通常在"PinMux"工作表,找到对应管脚的行,修改"Mux"列为"I2C3"。
7. 开发建议与最佳实践
基于多个项目的经验,我总结以下建议:
- 版本控制:将.xlsm文件纳入版本管理,每次修改都记录变更原因
- 注释说明:在Makefile中添加详细注释,说明每个配置的作用
- 验证流程:
- 修改前备份工作配置
- 每次只修改一个变量,便于问题定位
- 在开发板上验证所有关键功能
- 文档记录:维护一个配置变更记录表,包括:
- 修改日期
- 修改内容
- 影响范围
- 验证结果
对于Hi3519的启动配置差异问题,我建议通过以下方式进一步确认:
- 对比emmc和spi启动时的实际寄存器配置
- 查阅芯片参考手册的启动流程章节
- 联系原厂技术支持获取确切信息
在实际项目中,我发现海思芯片的管脚复用配置虽然复杂,但只要掌握了正确的方法和流程,就能高效地完成各种硬件适配工作。关键是要理解背后的原理,而不仅仅是机械地修改配置文件。