Other Parts Discussed in Thread: TMS320C6678
I have been following the SPRAAX4 "Getting Started With the C6000 Network Development Kit" I have managed to get the NDK example client project to work on the TMDSEVM6678LE, however this uses the C code configuration method rather than the XGCONF graphical method of configuration preferred in SPRU523H "TI Network Developer's Kit (NDK) v2.21 User's Guide" and is not IMHO a good starting point for developing our own network application. It would seem SPRAAX4 is somewhat out of date. Ideally I would like to be able to configure from scratch a new project to run the NDK on the TMDSEVM6678LE using the XGCONF to which I could then add my network application.
While a colleague has been successful doing just that for the C6657 EVM, repeating this feat on the C6678 EVM is currently defeating us. From here on when I refer to C6657 minimal NDK project and C6678 minimal NDK project I am referring to the minimal SYS/BIOS projects we have generated that use the NDK to run on the appropriate EVM as the basis for our network applications.
Details of our development environment:
TMDSEVM6678LE rev 3b
CCS 5.4.0.00091
MCSDK 2.1.2.6
MCSDK PDK TMS320C6678 1.1.2.6
NDK 2.22.3.20
SYS/BIOS 6.35.1.29
To generate the C6678 minimal NDK project I started by creating a new SYS/BIOS minimal project, then adjusted the SYS/BIOS configuration to include various parts of the NDK including EMAC, IP, TCP, UDP, DCHP CLIENT and Global Network Settings. I added the platform_osal.c and resourcemgr.c files from the NDK example client project (setting a compiler pre-processor define for _LITTLE_ENDIAN as I am running little endian and resourcemgr.c had some code conditional upon _LITTLE_ENDIAN being defined.). I selected "Use settings" for the following RTSC "Available Products": pdk_C6678_1_1_2_6/ti/drv/cppi, pdk_C6678_1_1_2_6/ti/drv/pa, pdk_C6678_1_1_2_6/ti/drv/qmss, pdk_C6678_1_1_2_6/ti/platform/evmc6678l, and pdk_C6678_1_1_2_6/ti/transport/ndk to get the project to build. We had to increase the BIOS.heapSize in the app.cfg script from 0x0 in order to get the C6657 minimal NDK project to work and so did the same in the C6678 minimal NDK project - it is not clear to me why it could not be given some "sensible" default.
However while the C6657 minimal NDK project runs, uses DHCP to get an IP address and can be pinged, the equivalent C6678 minimal NDK project does not. Rather I get the following console output:
"[C66xx_0] d begin
stack thread init
00000.000 NIMUIOCTL Failed with error code: -22
Service Status: DHCPC : Failed : : 000
d begin
stack thread init
00000.000 NIMUIOCTL Failed with error code: -22
Service Status: DHCPC : Failed : : 000
00000.000 NIMUIOCTL Failed with error code: -22"
It would seem that the NIMUIoctl() is returning -22 which I believe is EINVALID, an invalid parameter. Since this is all TI code, I am at a bit of a loss as to what is missing. Coupled with the fact that we performed almost identical steps on the C6657 EVM successfully this is a bit of a puzzle.
I have hooked into the stack thread begin hook, stack thread initialization hook, and network open hook and can see that these get run so the stack is being started, it just isn't working in the way the C6657 minimal NDK project "just does".
Any suggestions as to what is broken or what I have misconfigured would be appreciated.