嵌入式开发,有时候需要阅读大量的数据手册和用户手册,这些手册大都是英文的。所以博主在实践中总结了一些经验,分享给大家。同时,也分享TI C6657的SRIO的配置实例,跟大家互相交流学习
-
文档
该文档是程序,思想和灵魂的基础,因此阅读文档必须认真,但由于所有TI文档都是英语,因此非英语母语的人很难阅读它。让我说说我的方法:使用谷歌翻译。不仅要咬着子弹逐句阅读,而且如果您不理解还可以翻译它。我提供的方法是翻译大块并将其直接粘贴到谷歌翻译中。遇到晦涩的地方时,请仔细阅读英文,以提高效率。
当然,百度作为最大的中文文档搜索引擎,也是国内比较常用的搜索工具和翻译工具,在一定程度上可以作为谷歌搜索(在当前谷歌在国内被禁的时候更是)和谷歌翻译的补充。 -
实例
以SRIO调试为例。调试SRIO时,我的最初目标是使SRIO两端的设备能够相互读写。在开始阅读SRIO文档后,我很困惑。在阅读SRIO_Read代码之后,我逐渐了解到,我们需要调试的大多数正式例程已为我们完成。我们所要做的就是了解官方例程的工作以及我们需要添加的内容。
这些例程通常位于TI安装目录下的PDK66xx(6657是6678同系的器件,但核数为2,其它主要配置大致相同)文件夹中。3,实测(调试)
该程序最终将在板上运行,因此在编写程序后不确定是否可以实现程序的功能,最好的方法是在板上进行在线调试。由于担心麻烦而使用仿真器进行仿真,这种软件仿真的意思是调整算法,而不是调整硬件板,因此硬件调试必须在板上,否则只是纸上谈兵。
以上是我分享的一些学习经验,也是我学习DSP的指导思想。
让我们开始这个话题。
测试平台:
Win10 + CCS8.1 + TMS320C6657 + Xilinx K7 FPGA
DSP端参数设置
本系列的博客仅讨论DSP配置。
使用的官方例程路径:
C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ipc\examples\srioIpcBenchmark\device_srio.c
(6657一般情况下可以直接使用6678的一些例程)
可以尝试将此工程导入CCS中进行测试调试。
端口模式
SRIO通道具有回环模式和普通模式。要使用SRIO实现FPGA和DSP之间的通信,必须将每个端口调整为正常模式,即:
/ *将SRIO配置为以回送模式运行。 (原始例程代码)* /
// CSL_SRIO_SetLoopbackMode(hSrio,0);
// CSL_SRIO_SetLoopbackMode(hSrio,1);
// CSL_SRIO_SetLoopbackMode(hSrio,2);
// CSL_SRIO_SetLoopbackMode(hSrio,3);
/ *配置SRIO以正常模式运行。 (修改后的例程代码)* /
CSL_SRIO_SetNormalMode(hSrio,0);
CSL_SRIO_SetNormalMode(hSrio,1);
CSL_SRIO_SetNormalMode(hSrio,2);
CSL_SRIO_SetNormalMode(hSrio,3);
不了解的功能可以转到以下路径:
C:\ ti \ pdk_C6678_1_1_2_6 \ packages \ ti \ csl \ docs \ doxygen \ html \ csl__srio_aux_8h.html
查看相关的功能定义和功能
链接速率配置(链接速率)
/ *假设ref_clock为312.5 MHz,链接速率为3.125Gbps;对PLL进行相应的编程。 * /
CSL_BootCfgSetSRIOSERDESConfigPLL(0x229);
该语句是链接速率的配置,假设参考时钟为312.5MHz(对于不同的C66x系列DSP,参考时钟不同,因此该配置随电路板型号而异),并且要配置的链接频率为3.125 Gbps,则可以使用0x229作为此函数的参数。如果需要配置其他链接速率,则需要更改功能参数。功能参数的设置依据为:
首先,此功能是配置SRIO_SERDES_CFGPLL寄存器,其中最重要的是上图所示的0-9位。其中,ENPLL用于使能PLL(锁相环),该位必须设置为1;否则,该位必须设置为1。 MPY是选择PLL的倍频器,以图中的8.25x为例,并向SRIO_SERDES_CFGPLL的1-8位写入001000 01,高六位是整数部分,001000b是十进制8,低位小数点后两位是数字,01b是小数点0.25;至于VRANGE,只需写1。如果您想知道,可以自己使用谷歌。
0x229的1-8位是:0001 0100b,整数部分是5.那么有人会问,您说参考时钟是312.5MHz,现在PLL被乘以5倍,乘以的时钟频率不是3.125G?
不用担心,最终的链路速率不仅由锁相环决定,真正发挥传输作用的是RX和TX,因此它们的配置也会影响链路速率。稍后我将讨论RX和TX的配置。 RX和TX的配置寄存器具有单独的域,称为RATE,用于配置每个PLL时钟以采样多个数据。
下图显示了TX和RX的RATE字段的说明:
那然后!让我们看一下下表,我们将了解:
显然,在配置RX和TX时,我们将RATE设置为Half,即一个PLL时钟对两个数据进行采样,因此数据速率变为3.125G!
因此,在配置链接速率时,仅需考虑RX和TX的Rate域和PLL的MPY域。
接收和发送配置
接下来是我们的通道配置,发送器和接收器配置的亮点,RX负责接收数据,TX负责发送数据,如果您对RX和TX不太了解,可以阅读我以前的博客。您可能可以理解。首先看一下例程的这一部分的编写:
/ *配置SRIO SERDES接收配置。 * /
/ 回环模式 /
// CSL_BootCfgSetSRIOSERDESRxConfig(0,0x01C40495);
// CSL_BootCfgSetSRIOSERDESRxConfig(1,0x01C40495);
// CSL_BootCfgSetSRIOSERDESRxConfig(2,0x01C40495);
// CSL_BootCfgSetSRIOSERDESRxConfig(3,0x01C40495);
/ *非回环* /
CSL_BootCfgSetSRIOSERDESRxConfig(0,0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig(1,0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig(2,0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig(3,0x00440495);
/ *配置SRIO SERDES传输配置。 * /
/ *回环模式* /
// CSL_BootCfgSetSRIOSERDESTxConfig(0,0x00780795);
// CSL_BootCfgSetSRIOSERDESTxConfig(1,0x00780795);
// CSL_BootCfgSetSRIOSERDESTxConfig(2,0x00780795);
// CSL_BootCfgSetSRIOSERDESTxConfig(3,0x00780795);
/ *非回环* /
CSL_BootCfgSetSRIOSERDESTxConfig(0,0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig(1,0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig(2,0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig(3,0x00180795);
这两个功能的功能是配置RX和TX。写入的特定寄存器为:SRIO_SERDES_CFGRX [0-3]和SRIO_SERDES_CFGTX [0-3]。由于我们使用的是正常模式,因此我们将不解释环回模式下的RX和TX配置。我将这一部分分为两部分。
RX配置
写入SRIO_SERDES_CFGRX的值为0x00440495。让我们一步一步地讲:
首先看一下0-3bit:
最低位是RX使能位,因此,无论如何配置RX,3-0位都必须为0101b。
上面已经提到了4-5比特率字段。
第6位是极性转换域,它决定了高电平使能和低电平使能,将其设置为0并没有特殊要求。
7-9位只能是001b。如果您想进一步了解它,可以自己检查相关信息。
位10-11是对齐设置字段,通常设置为01b,需要特殊对齐设置时可以修改此字段。
第12-14位是丢失信号检测域,通常设置为000b。设置为001b,适用于无限宽带通信,设置为100b,适用于PCIE和S-SATA通信。
位15-17是时钟/数据恢复算法设置,在主要配置中不是很有用,只需将其设置为000。
第18-20位是均衡器配置,通常设置为001。
第21位是均衡器使能位,默认情况下处于启用状态,即将此位设置为0。
第22位是漂移补偿使能位,通常设置为1。
位23-24是回送使能位,设置为00,即关闭回环模式。
我不知道你是否发现了。除了速率位以外,几乎所有域都是固定配置,因此在配置RX时只需要修改速率位,其余位可以保持与0x00440495相同。
TX配置
写入SRIO_SERDES_CFGTX的值为0x00180795。让我们一步一步地讲:
0-6bit与RX相同。
7-10bit用于设置TX输出电压的幅度,一般设置为1111。
11-18位用于设置TX输出波形调整的权重,我不太了解。但通常设置为0000 0000。
19bit用于设置FIR滤波器的权重更新使能。 FIR是用于调整TX波形的滤波器,该位应设置为1。
20bit用于设置同步主线。同步需要主机。如果要将此位设置为1,则它是同步主线。如果此位设置为0,则它是同步无源线。对于单行,该位必须设置为高。如果是多行,则必须有一个TX位。设置为1.通常设置为1。
请注意,在拓扑中使用20位时,只能将一个TX设置为1。
另外,除了速率位以外,几乎所有字段都是固定配置,因此在配置TX时只需要修改速率位,其余位可以保持与0x00180795相同。
转载自原文链接, 如需删除请联系管理员。
原文链接:TI C6657 SRIO的配置实例(一),转载请注明来源!