第17节 网络例程
ps:两周前调试的网络,现在有些记不清了,现试着回想将开发流程写出来。
17.1节 创龙NDK_TCP例程编译
- 例程位置:E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Application\NDK_TCP
- 编译依赖的库版本
* CCSv7 IDE
* 7.4
* 依赖组件版本为
* - XDCTools 3.50.5.12-core *
* - Board Library 4.6.0.01 *
* - NDK 2.25.1.11 *
* - SYS/BIOS 6.52.0.12 *
* - UIA 2.20.0.02 *
* - C667x PDK 2.08
- 编译配置
- 公司板卡默认使用SPI启动,PLL没有配置,程序启动后需要代码配置PLL,代码修改如下:
E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Application\NDK_TCP\main.c
17.3节 与网络交换芯片5396互通
- DSP6678与5396互通,需要配置DSP6678 SerDes参数。 修改配置如下:
① 配置SerDes参数
C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\src\evmc6678_phy.c
configSerdes函数
//CSL_BootCfgSetSGMIIRxConfig (0, 0x00700621); // ti默认提供的配置参数
//CSL_BootCfgSetSGMIIRxConfig (1, 0x00700621);
CSL_BootCfgSetSGMIIRxConfig (0, 0x00440411); // 连接5396需要配置的参数
CSL_BootCfgSetSGMIIRxConfig (1, 0x00440411);
//CSL_BootCfgSetSGMIITxConfig (0, 0x000108A1); // ti默认提供的配置参数
//CSL_BootCfgSetSGMIITxConfig (1, 0x000108A1);
CSL_BootCfgSetSGMIITxConfig (0, 0x00010F11); // 连接5396需要配置的参数
CSL_BootCfgSetSGMIITxConfig (1, 0x00010F11);
② 打开主模式
C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib\src\evmc6678_phy.c
Init_SGMII函数
- platform_lib_evmc6678l为库文件,目录在C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform下,加载到CCS中后修改configSerdes函数,编译成功后的文件为platform\evmc6678l\platform_lib\lib\debug\ti.platform.evm6678l.ae66
- 将ti.platform.evm6678l.ae66拷贝到E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Library\Debug目录下,重新编译NDK_TCP例程即可(注意NDK_TCP工程配置文件中将Tronlong.DSP.C6678.Platform.le66库文件名称为ti.platform.evm6678l.ae66)
17.4节 EMAC0支持
- 默认ti提供的例程使用的是EMAC1,公司板卡硬件连接了EMAC0,此处需要做移植。
参考文章:
https://blog.youkuaiyun.com/kunkliu/article/details/107105797
https://www.pianshen.com/article/6008408646/
支持EMAC0移植步骤如下:
- 步骤1.
导入NIMU工程(C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ndk\nimu),修改nimu_eth.c文件。修改方法:
① EmacSend()函数中,移除下面这行代码:
Cppi_setPSFlags (Cppi_DescType_HOST, (Cppi_Desc *)pCppiDesc, (1<<gTxPort));
②EMACInit_Core()函数中,用下面的代码替换"#ifndef SIMULATOR_SUPPORT" 和 "#else" 之间的代码:
platform_get_emac_info(0, &emac_info);
memcpy(ptr_pvt_data->pdi.bMacAddr, emac_info.mac_address, 6);
③Init_Switch()函数中,把下面的代码放到Init_Switch()函数的最后:
// Configure "Learning"/"Forward" state for all 3 ports
int portNum;
for (portNum=0; portNum<3; portNum++)
{
CSL_CPSW_3GF_ALE_PORTCONTROL alePortControlCfg;
alePortControlCfg.portState = ALE_PORTSTATE_FORWARD;
alePortControlCfg.dropUntaggedEnable = 0;
alePortControlCfg.vidIngressCheckEnable = 0;
alePortControlCfg.noLearnModeEnable = 0;
alePortControlCfg.mcastLimit = 0;
alePortControlCfg.bcastLimit = 0;
CSL_CPSW_3GF_setAlePortControlReg (portNum, &alePortControlCfg);
}
④用下面的函数替代整个Init_Cpsw()函数:
int32_t Init_Cpsw (uint32_t mtu, uint8_t* myMACAddress)
{
uint8_t portMac[6] = {0x1, 0x1, 0x1, 0x1, 0x1, 0x1};
Init_MAC(0, portMac, mtu);
portMac[0] = 2;
Init_MAC(1, portMac, mtu);
/* Setup the Phys by initializing the MDIO - not needed for Simulator*/
Init_MDIO();
/* Setup the Ethernet switch finally. */
Init_Switch(mtu);
/* CPSW subsystem setup done. Return success */
return 0;
}
- 步骤2.
导入Platform_lib工程(C:\ti\pdk_C6678_1_1_2_6\packages\ti\platform\evmc6678l\platform_lib),修改platform.c,如果要支持双网口,把Init_SGMII(0);的注释去掉;如果要修改使之只支持port0,去掉Init_SGMII(0)的注释,并注释Init_SGMII(1)。
- 步骤3.
rebuild “Platform_lib工程”
rebuild “NIMU工程”
编译方法将在下一节介绍
ps:NIMU工程编译出的库名称为nimu_eth_evmc6678l.lib,位置C:\ti\pdk_C6678_1_1_2_6\packages\ti\transport\ndk\nimu\Debug,在NDK_TCP工程配置文件中需要修改名称。
- 移植成功后调试打印信息如下:
17.5节 nimu_eth_evmc6678l 编译
通过工程编译
17.5节 platform_lib_evmc6678l 编译
通过工程编译
17.6节 创龙NDK_Telnet例程分析
- 参考例程:E:\ft6678\doc\Tronlong6678\Demo\SYSBIOS\Application\NDK_Telnet-cks
- 原则上:只要创龙的NDK_Telnet可以编译通过(参考NDK_TCP例程),可以与PC机ping通即可。Telnet即可正常使用
- 代码中增加telnet支持:(通过对NDK增加Telnet配置信息,具体代码怎么实现的没有追究,以后有机会在研究)
// 添加一个 Telnet 服务器
CI_SERVICE_TELNET telnet;
bzero( &telnet, sizeof(telnet) );
telnet.cisargs.IPAddr = INADDR_ANY;
telnet.cisargs.pCbSrv = &ServiceReport;
telnet.param.MaxCon = 2;
telnet.param.Callback = &ConsoleOpen;
CfgAddEntry( hCfg, CFGTAG_SERVICE, CFGITEM_SERVICE_TELNET,0, sizeof(telnet), (UINT8 *)&telnet, 0 );
- NDK 中的telnet服务中通过ConsoleOpen创建了一个Console task,然后在里面实现了一些命令
ccs打印信息:
串口打印信息:
17.7节 应用层通过telnet打印调试信息支持
- 使用场景:8个核的调试打印信息通过网口输出。 尚未实现。
17.8节 tftp支持
- 默认Telnet例程中包含tftp功能,使用方法如下: