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/CC1310: CC1310 locks up by RF_scheduleCmd

Part Number: CC1310

Tool/software: Code Composer Studio

I used CSS to debug CC1310 in contiki-ng v4.3,and found the device locks up at :

cmd_rx_handle = RF_scheduleCmd();in sched.c, and RF_scheduleCmd() in RFCC26X2_multiMode.c

The printf function is used to output debugging information, as follows:
 

printf("working 0 \n");
  CMD_STATUS(netstack_cmd_rx) = PENDING;
  printf("working 1 \n");

  cmd_rx_handle = RF_scheduleCmd(
      &rf_netstack,
      (RF_Op *)&netstack_cmd_rx,
      &sched_params,
      cmd_rx_cb,
      RF_EventRxEntryDone | RF_EventRxBufFull); // CC1310 crashed here.

  printf("over up\n"); / / no output

How to solve this problem ?

PS: The CC1310 I used is version A, is it related?

  • Does it always lock up?

    If you attach a debugger, has the device actually crashed? Or, is it hanging somewhere in the code?

    Have you done any modifications to the radio driver?

    Any specific examples you are testing this with?

    Are you sure RFCC26X2_multiMode is used? It is not supposed to be used with CC1310...

  • Thanks for your reply !

    Q: Does it always lock up?

    A:YES

    Q: If you attach a debugger, has the device actually crashed? Or, is it hanging somewhere in the code?

    A: Yes, XDS110 is used. I debug the program by setting breakpoints in CCS, and found that CC1310 get in and crashed here. Then i added the printf and let the MCU running offline, similar conclusion were obtained.

    Q: Have you done any modifications to the radio driver?

    A:No

    Q: Any specific examples you are testing this with?

    A: I test it with the hello world example. Enables CSMA properties by enable define in .c .(Modifying the Makefile by MAKE was not successful  (┬_┬) )

    Q: Are you sure RFCC26X2_multiMode is used? It is not supposed to be used with CC1310...

    A: It's also confusing me. I used CCS to debug the program by setting breakpoints, and found that CC1310 get in and crashed here. Then i added the printf and let the MCU running offline, similar conclusion were obtained.

    I was just reading your previous work. "TI CC13xx /CC26xx SimpleLink platform #609" Thank you for your work!

  • When I commented(disable) the code

    /*

     cmd_rx_handle = RF_scheduleCmd(

          &rf_netstack,
          (RF_Op *)&netstack_cmd_rx,
          &sched_params,
          cmd_rx_cb,
          RF_EventRxEntryDone | RF_EventRxBufFull)

    */

    and disable the watchdog, the output can be normal for a while,about 30 second? then the MCU is down subsequently. If the watchdog is left running, CC1310 would restart regularly.

    If i do nothing, the MCU will NOT output any information.

  • So how do I reproduce this issue? If I compile the hello-world example it should crash immediately?

  •  Hi,

    you can modify the makefile file as follows with the hello-world example:
    TARGET = simplelink
    BOARD = launchpad/cc1310
    #CFLAGS += -g

    Check whether the serial port has message output (Hello, world),

    Thanks !

  • Thank you, I was able to reproduce the issue.

    The fix was simple and I've pushed a PR upstream: https://github.com/contiki-ng/contiki-ng/pull/993

  • Hi,I found a similar problem that caused an exception,when using rtimer. The attached file is my test program.

    When "TARGET = simplelink" is configured in the makefile , the MCU is down at the rtimer_callback().
    When changed  "TARGET = cc26x0-cc13x0" ,everyting is ok.

    /*
     * Copyright (C) 2015, Intel Corporation. All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * 3. Neither the name of the copyright holder nor the names of its
     *    contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
     * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     * OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #include <stdio.h>
    
    #include "contiki.h"
    #include "sys/etimer.h"
    #include "sys/stimer.h"
    #include "sys/timer.h"
    #include "sys/rtimer.h"
    
    PROCESS(timer_process, "ETimer x Timer x STimer Process");
    AUTOSTART_PROCESSES(&timer_process);
    
    static int counter_etimer;
    static int counter_timer;
    static int counter_stimer;
    static struct timer timer_timer;
    static struct stimer timer_stimer;
    static struct ctimer timer_ctimer;
    static struct rtimer timer_rtimer;
    
    /*---------------------------------------------------------------------------*/
    void
    ctimer_callback(void *ptr)
    {
      /* rearm the ctimer */
      ctimer_reset(&timer_ctimer);
      printf("CTimer callback called\n");
    }
    /*---------------------------------------------------------------------------*/
    void
    rtimer_callback(struct rtimer *timer, void *ptr)
    {
      /* Normally avoid printing from rtimer - rather do a process poll */
    
      //printf("RTIMER_NOW(): %d\n",(int)RTIMER_NOW());
      printf("RTimer callback called\n");
      /* Re-arm rtimer */
      rtimer_set(&timer_rtimer, RTIMER_NOW() + RTIMER_SECOND / 2, 0,
                 rtimer_callback, NULL);
    }
    /*---------------------------------------------------------------------------*/
    /*
     * This Process will count timer expires on one e-timer (that drives the
     * events to the process), one timer, and one stimer.
     *
     */
    PROCESS_THREAD(timer_process, ev, data)
    {
      static struct etimer timer_etimer;
    
      PROCESS_BEGIN();
    
      ctimer_set(&timer_ctimer, CLOCK_SECOND, ctimer_callback, NULL);
      printf("RTIMER_NOW(): %d\n",(int)RTIMER_NOW());
      rtimer_set(&timer_rtimer, RTIMER_NOW() + RTIMER_SECOND / 2, 0,
                 rtimer_callback, NULL);
    
      while(1) {
        /* set all the timers */
        timer_set(&timer_timer, 3 * CLOCK_SECOND);
        stimer_set(&timer_stimer, 3);
        etimer_set(&timer_etimer, 3 * CLOCK_SECOND);
    
        PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
    
        counter_etimer++;
        if(timer_expired(&timer_timer)) {
          counter_timer++;
        }
    
        if(stimer_expired(&timer_stimer)) {
          counter_stimer++;
        }
    
        printf("Timer process: %s\n", counter_timer == counter_etimer
               && counter_timer == counter_stimer ? "SUCCESS" : "FAIL");
      }
    
      PROCESS_END();
    }
    /*---------------------------------------------------------------------------*/