This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CCS/LAUNCHXL-CC1312R1: 6lowpan TI code example - forever loop from probably wrong version of ROM image

Part Number: LAUNCHXL-CC1312R1
Other Parts Discussed in Thread: SYSBIOS, CC1312R

Tool/software: Code Composer Studio

hi all,

i'm trying to launch 6LOWPAN TI code example on CC1312R1 EVB.

in debug mode it doesn't stop at the main() and no other brakepoint, but on this loop:

Void ti_sysbios_rom_cortexm_cc26xx_agama_CC26xx_badRomRevision__E()
{
/* Loop here forever if application is built with wrong version of ROM image */
while(1)
{
;
}


}

do you have any IDEA what is the problem, or what can solve it?

thanks,

V

  • Hi Vera,

    What IC revision do you have?

    See this post for details on how to check IC rev: e2e.ti.com/.../767769

    Regards,
    Fredrik
  • Hi Fredrik,

    i think this is E revision see attached capture:

    therefore i used sensor example from  CC13X2-26X2-SDK on SDK v2.40.00.81 version and it finally worked!! thank you!!

    I'm working on the 6lowpan code example which based on the 2.10.0.48 SDK  - is there any simple way to migrate to 2.40.00.xx SDK?

    the only solution I've found is to use this integration manual:

    Thanks,

    V

  • Hi Vera,

    I have notified the author of the SW and the document about your post.

    Are you saying that you were able to get 6LoWPAN working with SDK 2.40 by following the instructions in the document?

    Regards,
    Fredrik
  • Hi Fredrik,

    before your replay i couldn't launch anything on the board, now finally I've found a compatible version of sensor example which work on the LAUNCHPAD.

    i had no luck with the integration document, the merge part is low with instruction.

    is it possible there is more up to date(for revision E) 6lowpan example?

    thanks,
    V
  • Hi Vera,

    I have talked with the author of the design report. The plan is to release an update with revision E support by the end of the month.

    Regards,
    Fredrik
  • Hi Fredrik,

    TI sent me pre-released example of 6lowpan, and i managed to setup 6lowpan network.

    my setup includes: 1 Poll Root and 2 poll End-hosts.

    The problems:
    1. for some reason it takes more than 1 min for the EV Boards to start communicate, and to discover network changes.
    2. I've added a new socket between the end-nodes and sending to fixed ipv6 address of the nodes , but for some reason i'm unable to communicate between end-nodes until Root start send them messages.
    3. is it possible this problem exist cause i used the IP address the ROOT uses? where can i find the local fixed ipv6 address of the hosts?

    do you have an idea how to make it faster? or what is the reason for such delay?

    Thank you,
    vera

  • Hi Vera, 

    Please, find my comments here. 

    1. for some reason it takes more than 1 min for the EV Boards to start communicate, and to discover network changes. 

    - This can be configurable but the default setting was for a dense network situation. There are two different mechanisms running for each case: to start network and to discover network changes.  

    - The FH synchronization based on WI-SUN FAN spec was implemented to discover FH sequences for its parents. This is related to start communication. There are two steps to complete the FH sync and each step takes 20 seconds or more (based on SCAN_TIMEOUT_VALUE given below). Reducing the scan interval will fasten the discovery process but it would increase collisions among potential parents.

    /* timeout value (in milliseconds) for trickle timer initialization */

    #define TRICKLE_TIMEOUT_VALUE 6000
    #define TRICKLE_MAX_BACKOFF 3
    #define SCAN_TIMEOUT_VALUE 20000

    - For self-healing (to discover network changes), we implemented a keep-alive mechanism to detect its parent loss. The same story here. You can fasten the keep-alive process by reducing the KEEP_ALIVE_MAX_ATTEMPTS but it would increase fault detection ratio. There is a trade-off. 

    /* keep-alive */
    #define KEEP_ALIVE_MAX_ATTEMPTS 5
    #define KEEP_ALIVE_RX_TIMEOUT_VALUE (KEEP_ALIVE_TX_TIMEOUT_VALUE*KEEP_ALIVE_MAX_ATTEMPTS

    #define MAXIMUM_NUM_DATA_FAILURE 5

    2. I've added a new socket between the end-nodes and sending to fixed ipv6 address of the nodes , but for some reason i'm unable to communicate between end-nodes until Root start send them messages.

    Your observation is correct and I think that there is no issue on your implementation. In your 3-node topology, the end-node to end-node communication is possible only when the root has route entries for both, meaning that, in the polling example we provided, the root starts send a packet. The polling example for root starts to send data to a node when it's in its routing table.  

    In general, with the RPL protocol, the end-node to end-node communication happens by passing packets via a common ancestor that has destination entries. 

    Regards,

    Wonsoo

  • Thank you Wonsoo,

    1. i've changed the SCAN_TIMEOUT_VALUE to 10000, but it didn't helped me, i think it made the root node to stop sending keep alive messages to one of my nodes.

    2. what about the TRICKLE_TIMEOUT_VALUE  ? if i change it will it increase the discovery of new nodes?

    3. i have continuous problem regarding post to mailbox when i get "FALSE" response while posting, is there a proper way to change the mailbox size? 

    from app.cfg:

    /*
      =================================
      network stack mailbox
      =================================
    */
    var mailboxTcpipParams = new Mailbox.Params();
    mailboxTcpipParams.instance.name = "tcpip_mailbox";
    Program.global.tcpip_mailbox = Mailbox.create(16, 20, mailboxTcpipParams);

     this is the configuration, and when i change it the device get in to cont loop. 

    typedef struct __TCPIP_cmdmsg
    {
        uint8_t event_type;
        uint8_t index;
        void *data;
    } TCPIP_cmdmsg_t;

    i guess the size 20 is regarding to tne msg size. is there any description regarding this mailbox function used in app.cfg?

    4. another question regarding to the UDP buffer size UIP_CONF_BUFFER_SIZE - for some reason it configured to 300B , from the notes it contain udp header(8B) and the rest is for the upd payload. Q: is it posible to increse this buffer? when i'm changing it to 600B i hace compilation errors regarding memory limit.

    Thank you,

    Vera

  • Hi Vera, 

    Please, find my comments. 

    1. Did you make the changes for both root and end-node? If not, it should be. Can you clarify more on "didn't help"? Did you see the end-nodes join to the root but didn't see any improvement on joining time? Is this consistently happened? 

    2. The TRICKLE_TIMEOUT_VALUE is another parameter that can impact on the joining time. It's the same story. With a smaller value, it would increase collision probability so it might not fasten the joining process in a large network. But in a small network it would be effective. Depending on your network size and topology.

    3. Please, review TI-RTOS user guide for the API. The first parameter is for msg size. 

    Mailbox_create(SizeT msgSize, UInt numMsgs, const Mailbox_Params *params, Error_Block *eb);

     

    4. It's possible. I see a couple of issues for your changes though.  

    4.1. The specific object (.data) with the increment falls into the CACHE_RAM section. The software example configured the 8KB CACHE for general-purpose RAM. You can find the memory allocation in the cc13x2lp.cmd file (in the .nwm_data section). The corresponding .data allocation with the size increment should be removed from .nwm_data section, which means that the .data allocation moves to 80KB SRAM area. To optimize the memory usage, I would recommend you to allocate different .data in objects that fit into the 8KB RAM. To figure out this, you can take a look at the .map file generated with your binary. 

    4.2. To increase the UDP packet size, please increase the following buffer sizes for optimal performance. The following buffer sizes are related to the fragmentation and reassembly at 6LoWPAN layer. The fragmentation size is 128B. The 600B application data (+lower stacks headers) requires 5 fragments. If you consider to hold two application packets it requires 10. In the same way, the reassembly buffers hold receive packets. With a bigger size data, it will receive more numbers of packets in burst. 

    Unless you manage this, some packet drops would happen. The first two are for fragmentation and the last one for reassembly. Please, set the same number for  QUEUEBUF_CONF_NUM and QUEUEBUF_REF_NUM. 

    #define QUEUEBUF_CONF_NUM  6

    #define QUEUEBUF_REF_NUM 6

    #define SICSLOWPAN_CONF_REASS_BUF_SIZE 12

    Hope that this answer your questions. 

    Regards,

    Wonsoo

  • Vera, hello. Can you possibly advise us as to where you still need assistance with this E2E thread.? We received notification this morning that Wonsoo's last answer did NOT resolve your issue". As we take our designs seriously, we would like to understand where any open issues remain.

    Thanks for your continued interest in Texas Instruments.

    Best Regards,
    John Fullilove
    Reference Design Operations
    Texas Instruments
  • Hi John,

    the example is working, but the performance is low.

    i'm trying to make uart transmitter receives based on the 6lowpan in the middle but has very low bandwidth the max was 12.5kbps, i'm wondering what is the max bandwidth available for this configuration(directly between end-hosts).
    the PHY configuration: band:915MHZ, Phy type: GFSK 50Kbps, channel 0. udp buffer is 300B

    Best Regards,
    vera
  • Hi Vera,

    With 50kbps GFSK, you will get 8-kbps goodput (thoughput at application level considering all the overheads) based on real experiments shown in the design guide (~ 100 msec for 100B delivery). This degradation is expected with any communication systems. Based on the CC1312R datasheet, the UART baud rate can be up to 3Mbps.

    With the achievable goodput, the UART baud rate, configurable in the software example, will be not a bottleneck. Hope that this will clarify your issue.

    Regards,
    Wonsoo
  • Hi Wonsoo,

    thank you for your quick replay.
    what is the best was to achieve higher throughput from the project?
    is it possible to change the PHY configuration?

    p.s:

    where can i find this "design guide" ?


    thanks,
    Vera

  • Hi Vera,

    With the PHY ID of 132, the PHY rate can increase to 200-kbps. The available PHY IDs are summarized in the section 3.1.2.2.2.1 TI-15.4 PHY Configuration in the design guide.

    The TI 15.4-stack user guide in the SimpleLink SDK describes the details of each PHY ID mode. Thanks.
    Wonsoo