首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

HPI接口在TI SOC的应用详解 2

HPI接口在TI SOC的应用详解 2

HPID (HPI Data Register)
主机通过HPI 对DSP 的内存访问是间接访问,主机只能访问HPID,HPID 与DSP 内存之间是通过HPI 专属的DMA 进行数据搬运的。如图3 所示。



HPID 的访问分为自增模式和非自增模式。在自增模式下,访问HPID 后,HPIA 会自动增加指向下一个字地址,在连续访问时,自增模式因为减少了主机对HPIA 的操作,可以增加HPI 数据访问的吞吐率。非自增模式下访问HPID 后,HPIA 的值保持不变,主机需要更新HPIA 来访问下一个地址。

在写操作时,主机把数据写到HPID,HPI 将第二个半字的数据通过HSTROBE 的上升沿锁存到HPID 后,将HRDY 置为忙状态,并启动HPI DMA 将HPID 的内容搬到HPIA 所指向的内存单元,然后清除HRDY 指示可以进行下一次操作。

在读操作时,在第一个HSTROBE 的下降沿,HPI 采样到HR/W为读命令,则将HRDY 置为忙状态,启动HPIDMA 将HPIA 指向的内存单元的数据搬到HPID,清除HRDY 忙状态,主机端方可结束总线访问周期,锁存数据线上的有效数据。

5. HPI 操作流程
主机对HPI 的一次总线访问周期为分三个阶段:主机发起访问,HPI 响应,主机结束访问周期。
A.    主机发起访问:即对HPI 寄存器的读,或者写命令。主机送出的硬件信号为HSTROBE(由HCS, HDS1/2产生),HR/W,HCNTL0/1,HWIL,以及HD[0:n]。HPI 在HSTROBE 的下降沿采样控制信号HR/W,HCNTL0/1,HWIL 判断主机的操作命令。

B.    HPI 响应:HPI 在HSTROBE 的下降沿采样控制信号,根据控制信号做出相应的响应。如果是写(HR/W为低)命令,则在HSTROBE 的上升沿将数据线上的信号锁存到HCNTL0/1 和HWIL 指向的寄存器。如果是读命令(HR/W 为高),如果是读HPIC,或者HPIA 寄存器,HPI 将寄存器的值直接送到数据总线上;如果读HPID,HPI 先将HRDY 置为忙状态,HPI DMA 将数据从HPIA 指向的内存单元读到HPID,再送到数据线上,并清除HRDY 忙状态,在读HPID 后半字时,数据从寄存器直接送到数据总线上,不会出现HRDY 信号忙状态。

C.    主机结束访问周期:对于写操作,主机将数据送出后,只要满足芯片手册中HPI 对HCS 的最小宽度要求,即可结束访问周期。对于读HPID 操作,要等HRDY 信号由忙变为不忙,主机才能结束访问周期。两次连续的HPI 操作的间隔,在芯片手册的HPI 时序参数表里有要求,最小间隔为两个HPI 功能模块时钟周期。

6. HPI 常见故障案例分析
在HPI 应用调试过程中,常遇到的问题分为:写数据不成功,读数据不正确,HRDY 常高。这些问题通常都是由于时序不正确造成的,下面结合实际应用当中的案例进行分析。

1.1 写数据不成功
案例的硬件连接如下:


首先关注核心信号HSTROBE 由DSP_CS,ARM_WR(HDS1),ARM_RD(HDS2)产生,从下面时序图可以看出ARM_WR 的下降沿是最后产生的,所以写操作时HSTROBE 的下降沿反应的是ARM_WR 的下降沿。
写HPIC 的时序截图如下:



写HPID 的时序截图如下:


两个时序图显示主机送出的数据111b 在HSTROBE(ARM_WR)的下降沿后,很快被改变成其它值000b。在写HPID 的时序截图中,第一个HSTROBE 的下降后,HPI 送出HRDY 信号,然后数据线被改变,首先判断HPI 对主机的命令做出了响应,通过HRDY 信号的出现时机,说明HPI 判断这是一个读操作,可以判断为HSTROBE 的下降沿采样HR/W信号不正确。

从硬件连接来看,HSTROBE(HR/W)要采样HR/W,HCNTL0/1 来判断主机命令, HR/W的与HSTROBE 为同一信号源,且同为下降沿,HR/W与HSTROBE 的下降沿之间的setup 时间不够,采样HR/W的电平状态出现误判,认为是高电平读命令,HPI 对读命令的响应则是在第一个HSTROBE 的下降沿之后送出HRDY 信号,并在HRDY 之后,HPI 送出数据到总线上。

对于该问题,需要对参与HSTROBE 逻辑译码的HR/W信号的下降沿做延时处理,可在逻辑电路如CPLD 或 FPGA 里实现,以确保HSTROBE 的下降沿采样到稳定的HR/W电平。

1.2 读数据不正确
通常表现为读读HPIC,HPIA 正常,但读HPID 不正常,前半字为0,后半字正确,对同一个地址读两次,第二次的数据完全正确。

在案例中,用示波器观察HCS 与HRDY 之间的时序关系,发现HCS 的上升沿在HRDY 的上升沿之前,即主机在HPI 数据有效之前结束了访问周期。HRDY 的上升沿其实是因为HCS 的结束而拉高的,并非数据真正有效。



用户由于没有在硬件上将HRDY 与主机PowerPC 的TA 信号互连,没有硬件握手机制,于是从软件配置上加大主机的总线访问周期,即增加HCS 的宽度,故障现象没有变化。

原因分析:读HPID 与HPIC,HPIA 时序不同,读HPID 操作需要HPI DMA 从HPIA 所指向的地址读数据到 HPID,会有时间上的延时。而读HPIC 和HPIA 直接从寄存器读数据,没有延时,所以读HPIC,HPIA 是正确的。在读HPID 时,HPI 会在第一个HSTROBE 的下降沿后将HRDY 置位,指示数据未准备好的忙状态,主机应当在总线上插入等待周期,数据准备好后HPI 清除HRDY,主机才可以结束总线周期,通过HCS 的上升沿将有效数据锁存。

HSTROBE 的下降沿到数据有效之间的延时与芯片及HPI 接口的工作频率相关,以C5502,C5501 为例,在芯片手册中,这个延时参数H1 在SYSCLK1 与CPU 时钟的分频为4 时,最大延时为12*2H+20(ns),H=SYSCLK1/2,在HPI 启动期间,PLL 没有倍频,处于旁通状态,系统输入时钟就是CPU 的工作时钟,SYSCLK1默认分频为CPU 时钟的4 分频,以输入时钟为25MHz 为例,最大延时为:

这个时间长度通常超出了主机端总线周期的软件配置范围,所以通过软件配置增加HCS 的宽度不一定能满足 HRDY 的最大延时要求。在有的DSP 芯片手册上只提供了HRDY 的最小延时,最大延时与芯片的优先级设置,及系统配置相关而不确定,比如与系统中其它主模块如EDMA 同时访问DDR,那么延时与HPI 的优先级,EDMA 的优先级,EDMA 的burst 长度,以及DDR 的命令排序等配置相关,这样通过延长主机的总线访问周期,更加不可靠。

解决办法:在硬件设计之初,一定要利用HRDY 硬件握手信号[2][3]。虽然有的芯片HPIC 寄存器提供了HRDY 软件握手方式,只能做为弥补硬件设计之初遗漏HRDY 硬件握手信号的权宜之计,软件轮循HRDY 的办法会带来额外的开销,降低HPI 总线的吞吐率,增加主机软件实现的复杂度。而且有的芯片HPI 不支持HRDY 软件查询方法,只能通过硬件HRDY 保证数据的有效性。

1.3 HRDY 常高
有的系统在长时间运行中偶尔出现HRDY 常高,导致主机端总线访问异常,需要重新上电才能恢复HPI 的正常操作。这种故障是由于HPI 状态机出现异常。

从实际故障定位中总结出以下几点原因:
A.    HPI 的高低半字访问的顺序访问被其它HPI 访问打断:在复用模式下,一个完整的HPI 访问是由高低半字两次访问组成,需要严格保证,否则会破坏HPI 的状态机,从而导致不可预期的后果。
B.    主机通过HPI 访问了DSP 内部的保留空间,或者破坏了DSP 的程序,数据空间,导致DSP 运行异常,进而导致HPI 状态机异常。
C.    主机的HSTROBE 信号有毛刺,或者信号完整性不好,如下图中HCS(些案例HSTROBE 是由HCS 控制)的上升沿的回勾,都会导致HPI 误判断为主机的新的访问的开始,从而打乱了高低半字的访问顺序要求,导致HPI 状态机的错乱。



7. 总结
HPI 是一种简单的异步接口,只要设计中满足了时序要求,即可稳定工作。在开发当中遇到数据读写不正确,从HSTROBE 信号入手检查与之相关的信号的时序关系,便可以找出问题原因。另外,信号完整性是任何系统稳定工作的前提。

关于特定芯片上HPI 接口的特有功能本文没有针对讨论,如C6727 的字地址模式和字节地址模式可通过HPIC配置;C6727 在HPI 启动后ROM bootloader 将HPI 关闭,需要软件重新使能才能使用等;以及不同芯片的HPI 启动模式下的跳转方式不同,请参考相应芯片的HPI 手册及bootloader 应用手册。

参考文献:
[1] spra536:TMS320C6000 EMIF to TMS320C6000 Host Port Interface
[2]spra545: TMS320C6000 Host Port to MC68360 Interface
[3]spra546: TMS320C6000 Host Port to MPC860 Interface
返回列表