第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
- 編譯配置
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TVYF2c01mYxQnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1kzM2QDMyUTM5ETMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 公司闆卡預設使用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,此處需要做移植。
參考文章:
http://processors.wiki.ti.com/index.php/NDK,_PA_Resource_Wiki_for_Keystone_Devices#Q_Where_and_how_to_enable_the_EMAC0_on_C6678_EVM.27s_AMC_c
https://blog.csdn.net/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功能,使用方法如下: