从DM6446到DM6467:嵌入式视频处理系统硬件与软件迁移实战指南
2026/7/27 10:57:04 网站建设 项目流程

1. 项目概述与迁移背景

在嵌入式多媒体处理领域,德州仪器(TI)的TMS320DM6446和TMS320DM6467是两款经典的异构双核数字媒体片上系统(DMSoC)。它们都集成了ARM926EJ-S应用处理器和C64x+ DSP核心,广泛应用于视频编码、工业视觉、网络视频录像机(NVR)和数字标牌等场景。随着项目迭代和产品升级,从DM6446迁移到性能更强、功能更丰富的DM6467,是许多资深工程师都会面临的实际工程任务。

我手头这个项目,最初基于DM6446开发了一套高清视频处理系统。随着市场对更高分辨率(如1080p)和更复杂编码格式(如H.264 High Profile)的需求,DM6446的算力逐渐吃紧。同时,新项目需要集成千兆以太网、PCI接口以及更灵活的视频输入输出,这些正是DM6467的强项。于是,迁移工作提上日程。

迁移绝非简单的芯片替换。虽然两者同属DaVinci平台,软件架构(如Codec Engine、Framework Components)有很高的兼容性,但硬件层面的差异点遍布芯片的各个角落。从最直观的封装、引脚,到内部的时钟网络、电源域,再到具体外设的功能特性和寄存器映射,都需要逐一核对、验证和修改。这份指南,正是我结合官方迁移文档(SPRAAZ3)和实际项目踩坑经验,梳理出的关键差异点和实操要点。目标很明确:帮助正在或计划进行此项迁移的同行,系统性地理解变化,避开陷阱,高效完成移植。

2. 核心硬件差异与迁移影响分析

迁移的第一步,不是急着改代码,而是吃透数据手册,从顶层看清两款芯片的“体格”与“能力”差异。这决定了我们迁移的整体策略和工程量评估。

2.1 性能与封装物理差异

首先看基本规格。DM6446最高主频为ARM 297 MHz / DSP 594 MHz,而DM6467提供了ARM 364.5 MHz / DSP 729 MHz的更高性能选项。这意味着在完成硬件迁移后,我们有机会通过提升主频来获得更充裕的处理能力,但同时也需关注散热和电源设计的调整。

封装与引脚的差异最为直接。DM6446采用361球的ZWT封装(16x16 mm),而DM6467升级为529球的ZUT封装(19x19 mm)。球间距保持0.8mm,但封装尺寸增大,引脚数量大幅增加。这意味着原有的PCB必须重新设计,无法做到引脚兼容替换。在规划新板时,需要仔细对照DM6467的引脚复用(Pin Mux)表,因为很多外设信号的位置和复用关系都发生了变化。例如,DM6467新增的PCI、TSIF等接口占用了大量引脚,导致GPIO数量从DM6446的最多71个减少到最多33个(均为3.3V)。如果你的旧系统严重依赖GPIO进行控制或状态指示,那么在新板上可能需要通过CPLD或IO扩展芯片来弥补。

电源架构也有重要变化。DM6446采用1.2V核心电压、1.8V和3.3V双IO电压。DM6467的核心电压在594MHz下可选1.05V或1.2V,729MHz下必须为1.2V;其IO电压主要为3.3V,同时需要独立的1.8V电源给DDR2接口和PLL供电。这里有个关键点:DM6467取消了1.8V的通用IO电源域,所有GPIO、EMIFA等接口都运行在3.3V。如果你的旧板卡上有直接连接到DM6446 1.8V GPIO的外设(例如某些低电压传感器、Flash),在新设计中必须加入电平转换电路,或者为这些外设单独提供1.8V电源并确认其IO口能容忍3.3V输入。

2.2 视频子系统架构变革

这是功能差异最大的部分,直接影响到视频通路的设计和驱动软件。

DM6446的视频处理子系统(VPSS)分为视频前端(VPFE)和视频后端(VPBE)。VPFE包含CCD控制器、预览引擎、H3A统计模块和缩放器,主要用于连接摄像头传感器并做预处理。VPBE包含OSD引擎和视频编码器(VENC),带4路54MHz DAC,可直接输出模拟CVBS、S-Video和分量信号。

DM6467则采用了不同的架构:视频端口接口(VPIF)视频数据转换引擎(VDCE)。VPIF是一个纯数字视频接口,支持2路输入(可配置为2路SD BT.656或1路HD BT.1120)和2路输出(同样支持2路SD或1路HD)。它不再集成模拟DAC。这意味着如果你的产品依赖DM6446直接输出模拟视频到电视机或监视器,那么在DM6467平台上必须外接一颗视频编码芯片(如TVP5158、THS8200等),由VPIF输出数字视频流给编码芯片,再转换成模拟信号。

VDCE可以看作是VPFE中部分功能的增强与替代。它主要提供缩放(Scaling)色度格式转换(CSC)功能。其缩放器支持水平和垂直独立配置,缩放系数为256/N(N=256~2048),并带有抗混叠滤波,质量比DM6446的Resizer更好。色度转换主要在4:2:2和4:2:0之间进行,这对于连接视频编解码器(如H.264编码器输出4:2:0)和显示接口(通常需要4:2:2)非常关键。VDCE还提供了一个简单的2位硬件菜单叠加(OSD)功能,但远不如DM6446 VPBE中的全功能OSD引擎强大。复杂的图形叠加可能需要借助ARM的2D图形加速或软件实现。

迁移实操要点

  1. 硬件设计:评估视频输入输出需求。如果只有数字接口需求(如HDMI发送器),那么VPIF更简洁。如果需要模拟输出,务必预留视频编码芯片电路。
  2. 驱动与算法:DM6446的VPFE/VPBE驱动(如V4L2驱动框架)不能直接用于DM6467。需要基于TI的dm365_vpifdm365_vpfe等驱动模型进行移植,重点调整视频数据流路径,将原来VPFE捕获的数据通路改为VPIF捕获,并可能经过VDCE处理后再送显示或编码。
  3. 编解码器:DM6446的VICP是半固定的协处理器,而DM6467搭载了两个可编程的HDVICP,支持H.264 HP、MPEG-2 MP/HL、VC-1、MPEG-4等格式的编解码。TI提供的编解码算法包(Codec Server)通常已经适配了不同平台,但需要重新编译并链接到针对DM6467的xDM接口库。务必检查算法对内存带宽、缓存配置的要求,DM6467的DSP L2缓存更大(128KB vs 64KB),这可能影响性能优化参数。

2.3 存储与DMA控制器升级

内存接口和DMA是系统性能的基石,这里的改动需要仔细验证。

DDR2控制器:两者都支持32位DDR2 SDRAM,但DM6467的地址总线更宽(15位行地址 vs 13位),支持更大容量的内存条。关键差异在时钟源:DM6446的DDR2时钟来自PLL2的SYSCLK2,而DM6467来自PLL2的SYSCLK1。在初始化PLL和设置DDR2控制器时序参数(SDRAM_CONFIGSDRAM_TIMING等寄存器)时,必须使用DM6467数据手册中的参考值,并基于实际的输入时钟频率重新计算。DM6467还支持片上终端电阻(ODT),这有助于改善信号完整性,在PCB布局和时序约束中可以加以利用。

异步EMIF(EMIFA):控制器本身逻辑相似,都支持8/16位数据总线、4个片选。主要区别在于:

  • 时钟源:DM6446来自PLL1的CLKDIV6,DM6467来自PLL0的SYSCLK3。初始化代码中设置EMIFA时钟分频比的寄存器位置和位域可能不同。
  • 等待引脚:DM6446只有1个EM_WAIT,而DM6467有4个(EM_WAIT[5:2]),可以为每个片选配置独立的等待信号,灵活性更高。
  • 引脚复用:EMIFA信号与不同外设复用,需要根据新板的实际使用情况,正确配置PINMUX0PINMUX1寄存器。

EDMA3控制器:这是性能提升的关键之一。DM6446只有2个传输控制器(TC)和2个队列,而DM6467有4个TC和4个队列。这意味着可以并发处理更多的DMA传输,减少通道间的资源竞争。参数RAM(PaRAM)集合也从128个增加到512个,可以定义更复杂的传输链。在迁移时,如果你的应用大量使用EDMA进行视频数据搬运(例如从VPIF到DDR2,或从DDR2到显示缓冲区),可以重新规划通道和TC的分配,优化并行度。此外,DM6467的EDMA3中断事件映射也发生了变化(参见原文表11),在初始化EDMA和编写中断服务程序时,必须更新事件号。

3. 关键外设模块迁移详解与软件调整

硬件差异理清后,就需要深入到各个外设模块,修改驱动和配置代码。以下是一些最常遇到且容易出问题的外设。

3.1 主机端口接口(HPI)配置差异

HPI常用于与外部主机处理器(如FPGA或另一颗ARM)进行高速数据交换。两者HPI功能相似,但细节上有多处不同:

  1. 数据总线宽度:DM6446的HPI固定为16位复用地址/数据总线,与EMIFA共享引脚。DM6467的HPI则可以通过配置支持16位或32位数据总线,且访问模式支持单字周期和双半字周期。如果你的主机是32位处理器,使用DM6467的32位HPI模式可以显著提升吞吐量。
  2. 时钟源:DM6446 HPI时钟来自SYSCLK5(PLL1/6),DM6467则来自SYSCLK3(PLL0/4)。在系统初始化设置PLL和时钟分频器时,必须确保HPI时钟频率在数据手册规定的范围内。
  3. 访问类型控制:HPI的访问类型(HPIC、HPIA、HPID自动增量、HPID非自动增量)由HCNTL[1:0]HR/W信号组合决定。DM6446和DM6467的映射关系完全不同(见原文表21、22)。这是迁移中最容易导致主机通信失败的地方。必须根据DM6467的映射表,修改主机端HPI驱动器的控制逻辑。
  4. 可访问的寄存器:DM6446的HPI可以访问PLL1和PLL2的寄存器,而DM6467的HPI可以访问PLL0和PLL1的寄存器。如果主机需要通过HPI动态调整系统时钟,需要修改访问的寄存器地址。

软件修改示例: 假设主机通过HPI读取DSP内存中的一个字(32位)。在DM6446上,典型的操作序列是:先设置HCNTL[1:0]=01b选择HPIA寄存器,写入目标地址;再设置HCNTL[1:0]=10b选择HPID(自动增量)进行读操作。而在DM6467上,写入HPIA需要HCNTL[1:0]=01b,从HPID(自动增量)读需要HCNTL[1:0]=10b看起来一样?注意HR/W信号!在DM6467上,HPID读周期(带自动增量)要求HCNTL[1:0]=10bHR/W=1;而在DM6446上,同样的操作是HCNTL[1:0]=01bHR/W=1。主机端的控制代码必须据此重写。

3.2 脉宽调制器(PWM)模块变更

PWM常用于电机控制、背光调光或简单的DA转换。两者的PWM核心原理相同,但存在以下关键区别:

  1. 输出通道数量:DM6446有3个独立的PWM输出,DM6467只有2个(PWM0, PWM1)。如果你在旧设计中使用了全部3个PWM,需要评估是否可以通过分时复用、或用定时器加GPIO模拟来替代缺失的那一路。
  2. 时钟源:DM6446的PWM时钟直接来自输入时钟(经PLL前),而DM6467的PWM时钟来自SYSCLK3(PLL0/4)。这意味着PWM的频率和分辨率计算公式发生了变化。在初始化PWM周期和占空比寄存器时,需要根据SYSCLK3的实际频率重新计算分频系数和计数值。
  3. 单次触发模式计数器:在单次触发模式下,DM6446使用一个8位重复计数器,产生N+1个脉冲后停止。DM6467则使用一个32位重复计数器。这提供了极大的灵活性,但如果你旧代码中对该计数器写入的是8位值(例如0xFF),在DM6467上会产生完全不同的脉冲数量(255 vs 4294967295)。必须检查并修改所有对PWM重复计数器的赋值操作。
  4. 引脚复用:PWM0和PWM1的输出引脚位置发生了变化,并且可能与UART、McASP等外设复用。必须在PINMUX寄存器中正确配置,将所需引脚功能切换到PWM。

3.3 通用输入输出(GPIO)模块差异

GPIO看似简单,但差异点也不少,容易在调试时造成困扰。

  1. 数量和电压:如前所述,DM6446有多达54个1.8V GPIO和17个3.3V GPIO。DM6467所有GPIO(最多33个)都是3.3V。电压兼容性是首要检查项
  2. 时钟源:DM6446 GPIO模块时钟是SYSCLK5(PLL1/6),DM6467则是PLL0/6。最大操作速度都是10MHz。如果软件中有对GPIO速度的依赖(例如通过循环进行短延时),需要确认时钟频率变化是否影响时序。
  3. 中断能力:DM6467的所有GPIO引脚都可以配置为中断源。而DM6446只有一部分GPIO具备此功能。这是一个增强特性,如果你的应用需要更多外部中断,可以在DM6467上更灵活地分配。但需要注意的是,GPIO中断在两级中断控制器(ARM的AINTC和DSP的CIC)中的事件映射号发生了变化(参见原文中断事件表),在使能中断和编写ISR时需要更新。
  4. 寄存器地址与位域:虽然GPIO控制寄存器(方向DIR、数据DATA、置位/清除SET_DATA/CLR_DATA、中断使能INTEN等)的功能和相对偏移地址基本一致,但绝对基地址可能不同。在gel文件、内存映射头文件或驱动中,必须将GPIO的基地址更新为DM6467的值(0x01C67000)。

注意:在修改GPIO相关代码时,务必同时检查引脚复用配置。一个引脚即使软件配置为GPIO输出,如果PINMUX寄存器将其映射到了其他外设功能(如UART的TXD),实际物理引脚也不会输出GPIO信号。这是硬件调试中常见的“软件配置正确但引脚无反应”的问题根源。

3.4 中断系统事件映射重构

中断是系统实时性的保障,其映射关系的任何变动都可能导致中断无法触发或触发错误服务程序。

DM6446和DM6467的中断架构类似:ARM端有最多64个中断源,映射到IRQ和FIQ;DSP端有128个系统事件,通过中断选择器和组合器映射到12个可屏蔽中断。但具体的外设中断事件编号发生了大规模重组

例如,DM6446上UART0的接收事件URXEVT0映射到DSP系统事件18,而DM6467上同样的事件也映射到系统事件18(幸运地保持一致)。但DM6446的ASP发送事件ASPXINT是系统事件48,而DM6467上对应的McASP0发送事件AXINT0是系统事件54。绝对不能想当然地认为事件号不变

迁移操作步骤

  1. 制作映射对照表:将原文中的“中断系统事件比较表”打印出来或做成电子表格,作为迁移的基准文档。
  2. 梳理现有中断使用情况:列出旧代码(DM6446)中所有使用的中断源,包括ARM IRQ/FIQ和DSP系统事件。明确每个中断的服务对象(哪个外设,什么事件)。
  3. 逐一查表转换:根据对照表,找到每个中断源在DM6467上对应的新事件编号。
  4. 修改代码
    • ARM端:修改AINTC的初始化代码,更新中断向量表(INTC_VECT_ADDR)和中断选择器(INTC_SELECT)的配置,确保正确的中断源被映射到期望的IRQ/FIQ通道和优先级。
    • DSP端:修改CIC(芯片中断控制器)的配置,更新事件到中断通道的映射(EVTm寄存器),以及中断通道到CPU中断的映射(INTMUX寄存器)。
    • 外设驱动:更新外设驱动中中断使能/清除的寄存器操作,虽然外设本地的中断使能位通常不变,但需要确认。
  5. 更新链接命令文件:如果DSP的中断服务程序(ISR)采用静态中断向量表(在.intvecs段),需要确保向量表的顺序与新的INTMUX映射匹配。

4. 系统级功能迁移与启动流程调整

除了具体外设,系统级别的功能,如如何上电、如何加载程序、如何管理功耗,也需要同步调整。

4.1 引导加载(Bootloader)模式扩展

DM6467的ARM引导模式比DM6446更丰富,这为系统设计提供了更多灵活性。

ARM Boot模式

  • DM6446:支持4种模式(HPI、NAND Flash、UART0、EMIFA直接执行)。
  • DM6467:支持7种模式,新增了PCI bootI2C Master boot(使用AIS格式)和SPI boot(使用AIS格式)。AIS(Application Image Script)是TI定义的一种引导镜像格式,包含初始化命令和程序代码,比原始的二进制镜像更强大。

DSP Boot模式

  • DM6446:DSP有独立的引导模式,由DSP_BT引脚选择,支持HPI、EMIFA等。
  • DM6467:DSP只有一种自举模式(DSPBOOT=1),即从EMIFA地址0x42200000直接启动。但是,当ARM选择HPI或PCI引导模式时(BTMODE[3:0] = 001x),DSPBOOT引脚配置会被内部覆盖为0,且EMIFA引脚被HPI/PCI功能占用,此时DSP无法从EMIFA启动,必须由ARM通过HPI或PCI加载DSP代码后,再释放DSP复位。

迁移影响与操作

  1. Boot引脚配置:DM6446使用BTSEL[1:0]DSP_BT引脚,而DM6467使用BTMODE[3:0]DSP_BT引脚。硬件上需要修改上拉/下拉电阻网络。
  2. Bootloader工具:如果使用TI的ubl(U-Boot loader)或自定义引导程序,需要针对DM6467重新编译。DM6467的AISgen工具用于生成AIS格式镜像,如果使用I2C或SPI引导,这是必须的。
  3. DSP代码加载:如果旧方案是DSP独立从NOR Flash启动,在新方案中可能需要改为由ARM的引导程序(如U-Boot)通过HPI或内部存储器接口将DSP程序镜像加载到DSP的L2RAM或DDR中,然后启动DSP。这涉及到ARM端引导代码的修改。

4.2 电源与时钟管理策略更新

有效的电源管理能显著降低系统功耗,尤其在电池供电设备中。

电源域:DM6446有独立的“Always On”域和“DSP”域,DSP和VICP可以单独下电。DM6467则只有一个“Always On”电源域,所有模块(包括DSP和HDVICP)都在其中。这意味着在DM6467上,无法像DM6446那样单独关闭DSP核的电源来省电。省电主要依靠时钟门控和睡眠模式。

本地电源与睡眠控制器(LPSC):PSC通过LPSC管理每个外设模块的时钟和复位。DM6446和DM6467的模块在LPSC中的编号分配完全不同(见原文表25)。例如,DM6446的LPSC0是VPSS DMA,而DM6467的LPSC0是保留的;DM6446的EDMA控制器在LPSC2和3,而DM6467的EDMA控制器在LPSC4、5、6、7。在初始化代码中,通过PSC模块使能或禁用某个外设时钟时,必须使用新的LPSC编号。一个常见的错误是,直接复用DM6446的代码,导致试图操作一个不存在的LPSC,或者错误地关闭了正在使用的外设时钟。

时钟与PLL:两者都有三个PLL(PLL0, PLL1, PLL2),但内部结构有差异(见原文图1-4)。DM6446的PLL1产生SYSCLK1-5,PLL2产生SYSCLK1-2(用于VPSS和DDR2)。DM6467的PLL1产生SYSCLK1-9,PLL2专门用于DDR2。最关键的迁移点在于:许多外设的时钟源发生了变化。例如前面提到的HPI、PWM、GPIO、EMIFA等。在系统初始化脚本(如gel文件)或PLL初始化函数中,必须按照DM6467的时钟树,重新计算并设置各分频器的值,以确保每个模块得到正确的时钟频率。盲目沿用DM6446的PLL配置参数,很可能导致外设工作异常或性能不达标。

软件修改示例: 假设需要将ARM频率设置为297MHz,输入时钟为27MHz。在DM6446上,可能配置PLL1倍频为x22,后分频为/2得到297MHz。在DM6467上,PLL1的倍频和后分频配置寄存器位域可能不同,且需要额外配置SYSCLK2(给ARM)的分频器。代码需要重写:

// DM6446 示例 (伪代码) PLL1_PLLM = 22; // 倍频 PLL1_POSTDIV = 1; // 后分频 /2 // ... 等待PLL锁定 // DM6467 示例 (伪代码) PLL1_PLLM = 22; // 倍频 PLL1_POSTDIV = 1; // 后分频 /2 // 设置SYSCLK2的分频比,假设输入到ARM的是SYSCLK2 PLL1_SYSCLK2_DIV = 1; // 分频比 // ... 等待PLL锁定

4.3 引脚复用配置与PCB设计要点

引脚复用(Pin Mux)是连接芯片内部逻辑与外部物理引脚的关键。DM6467的引脚功能分配与DM6446大相径庭。

配置时机:引脚复用的初始状态由芯片上电复位时某些配置引脚的电平决定。复位后,可以通过PINMUX0PINMUX1寄存器动态修改。务必在访问一个外设之前,将其所用引脚配置为正确的功能模式。一个良好的实践是在系统初始化早期,就根据板级硬件设计,集中配置所有PINMUX寄存器。

配置方法:仔细查阅DM6467的数据手册中的“Pin Attributes”表格。对于每个引脚,表格会列出所有可复用的功能(如gpio[31],uart0_rxd,mcasp0_axr0等)及其对应的PINMUX寄存器位域值。根据你的原理图连接,为每个用到的引脚选择正确的功能。

常见陷阱

  • 功能冲突:两个外设可能复用到同一组引脚。例如,PCI接口和EMIFA的某些数据线是复用的。如果你的设计同时需要PCI和EMIFA(比如接NOR Flash),这就产生了冲突,必须在设计初期就做出取舍。
  • 未用引脚处理:对于未使用的引脚,建议根据数据手册将其配置为GPIO输入并内部上拉或下拉,或者配置为一个无害的输出功能,以避免悬空引脚产生振荡增加功耗或引入噪声。
  • 电压域:虽然DM6467通用IO是3.3V,但一些特殊接口(如DDR2、USB)有自己独立的电压要求。PCB布局时,需要为这些接口提供干净、独立的电源和地平面。

5. 迁移实操清单与常见问题排查

基于以上分析,我总结了一个从DM6446迁移到DM6467的实操检查清单。你可以按此顺序进行,避免遗漏。

5.1 硬件设计与检查清单

  1. 原理图与PCB

    • [ ] 采用DM6467 ZUT529封装,参考其官方引脚定义图。
    • [ ] 根据功能需求,完成所有引脚复用分配,并标注在原理图上。
    • [ ] 电源设计:提供1.2V(或1.05V)核心电压、3.3V IO电压、1.8V DDR2/PLL电压。注意电源上电/掉电时序要求。
    • [ ] 时钟电路:27MHz主晶振,为USB提供24MHz辅助时钟(AUX_CLKIN)。
    • [ ] DDR2接口:遵循DM6467的布线指南,注意信号分组、端接(特别是ODT的使用)和时序约束。
    • [ ] 配置引脚:正确设置BTMODE[3:0],DSP_BT等引导配置引脚的上拉/下拉电阻。
    • [ ] 电平转换:如有连接1.8V外设,需加入电平转换器。
    • [ ] 视频输出:如需模拟输出,设计视频编码芯片(如TVP5158)及其电路。
  2. 元器件选型

    • [ ] DDR2 SDRAM:型号、速度等级需满足DM6467的时序要求。
    • [ ] Flash:根据引导方式选择NAND Flash(如引导)或NOR Flash(如EMIFA引导)。
    • [ ] 电源芯片:确认输出电流能力满足DM6467的功耗需求(尤其是729MHz版本)。

5.2 软件移植与修改清单

  1. 基础工程配置

    • [ ] 编译器与工具链:确保使用支持DM6467的CCS版本和编译器(如TI v7.4或更高)。
    • [ ] 新建CCS工程,选择正确的器件型号TMS320DM6467
    • [ ] 更新链接命令文件(.cmd):根据DM6467的内存映射(0x80000000起始的DDR2,0x11800000起始的ARM RAM等)修改MEMORYSECTIONS指令。
  2. 启动与初始化代码

    • [ ]gel文件或bootloader:重写PLL初始化序列,按照DM6467的时钟树配置PLL0,PLL1,PLL2及各SYSCLK分频器。
    • [ ] 引脚复用初始化:在main()或板级初始化函数最开始,根据硬件设计配置PINMUX0PINMUX1寄存器。
    • [ ] 电源与睡眠控制器(PSC)初始化:使用新的LPSC编号,使能所有需要用到的外设模块时钟(如PSC0,PSC1)。
    • [ ] DDR2初始化:使用DM6467的时序参数初始化DDR2控制器。可参考TI提供的初始化脚本。
    • [ ] 中断控制器初始化:更新AINTCCIC的配置,使用新的中断事件映射表。
  3. 外设驱动移植

    • [ ]视频相关:将VPFE/VPBE驱动替换为VPIF/VDCE驱动。调整视频采集、显示的数据流路径。
    • [ ]HPI:修改主机端和控制器的访问序列,匹配新的HCNTL/HR/W映射。
    • [ ]EDMA:检查并更新所有EDMA通道参数和传输完成中断事件号。考虑利用新增的TC和队列优化性能。
    • [ ]UART/SPI/I2C:更新外设基地址(通常不变,但需确认),检查时钟源配置(如UART的位时钟源)。
    • [ ]GPIO:更新基地址,检查引脚编号和电压。修改中断配置代码。
    • [ ]PWM:修改时钟源配置和重复计数器位宽处理。
    • [ ]EMAC:DM6467支持千兆模式,驱动中可能需要添加对GMII的支持。
    • [ ]USB:注意USB_DRVVBUS引脚的控制,用于作为主机时使能外部5V电源。
  4. 应用程序与算法

    • [ ] 重新编译所有DSP算法库,链接DM6467专用的rts64plus.lib运行时库和dsplib
    • [ ] 更新编解码引擎(Codec Engine)配置,指向DM6467的Server(包含HDVICP加速的算法)。
    • [ ] 如果使用了缓存操作(CACHE函数),注意DM6467的L1D和L2缓存大小与DM6446不同,可能需要调整缓存一致性策略。
    • [ ] 检查所有对内存地址的硬编码,确保符合DM6467的内存映射。

5.3 常见问题与调试技巧

  1. 系统无法启动,无输出

    • 检查:电源、时钟、复位信号是否正常。测量核心电压、PLL输出时钟。
    • 检查:Boot配置引脚BTMODE[3:0]的电平是否与Flash中镜像的引导方式匹配。
    • 检查gel文件中PLL初始化代码,确认锁相环已锁定,各模块时钟已使能。
    • 使用工具:连接JTAG仿真器,看是否能识别到ARM和DSP核心。如果能识别,单步跟踪启动代码。
  2. DDR2访问不稳定,数据错误

    • 检查:PCB布线是否符合DDR2的时序和信号完整性要求(长度匹配、阻抗控制、参考平面)。
    • 检查:DDR2控制器初始化参数,特别是时序参数tRAS,tRCD,tRP,tRFC等,需根据使用的DDR2芯片型号精确计算。
    • 检查SDCFG寄存器中的CAS Latency设置是否正确。
    • 使用工具:运行TI提供的DDR2内存测试算法,进行读写完整性测试。
  3. 外设(如UART、I2C)无法正常工作

    • 检查PINMUX寄存器配置,确认相关引脚已切换到正确的功能模式。
    • 检查:PSC中该外设对应的LPSC模块时钟是否已使能(MDCTL[LSTATE] = ENABLE)。
    • 检查:外设的输入时钟频率配置是否正确(例如UART的位时钟源)。
    • 检查:外设本身的控制寄存器配置(如波特率、数据格式)。
    • 使用工具:用示波器或逻辑分析仪测量引脚波形,看是否有数据发出/接收。
  4. 中断无法触发

    • 检查:中断事件号是否已根据DM6467的映射表更新。
    • 检查:两级中断控制器(AINTC/CIC)的映射配置是否正确,中断是否已使能(IER寄存器),全局中断是否打开(CSR寄存器)。
    • 检查:外设本身的中断使能位是否置位。
    • 使用工具:在中断服务程序入口设置断点,或在ISR中翻转一个GPIO,用示波器观察。
  5. 视频采集或显示异常

    • 检查:VPIF的输入/输出时钟、同步信号极性配置是否与视频源/显示设备匹配。
    • 检查:VDCE的缩放系数、色度转换格式设置是否正确。
    • 检查:视频数据缓冲区地址是否对齐,EDMA传输参数(源/目标地址、偏移、数据大小)是否正确。
    • 使用工具:通过CCS的Memory Browser查看视频缓冲区数据,或使用TI的Image Analyzer工具可视化YUV数据。

迁移过程犹如一次精密的设备移植手术,需要耐心和细致。最有效的策略是分模块验证:先确保最小系统(电源、时钟、DDR2、UART打印)工作,然后逐个使能并测试外设。充分利用TI提供的参考设计、驱动源码和调试工具,能极大提升效率。记住,每一次成功的迁移,不仅是对新芯片特性的掌握,更是对原有系统理解的深化。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询