CC3200 Summary of Known Issues

From Texas Instruments Wiki
Jump to: navigation, search
Cc31xx cc32xx return home.png
Cc32xx return sample apps.png



Overview

This page contains all the known issues/limitations of CC32xx SDK release.

Summary

SDK Version Known Issues
1.1.0 SDK 1.1.0 known issues
1.0.0 SDK 1.0.0 known issues
0.5.2 SDK 0.5.2 known issues

SDK 1.1.0 Known issues

Simplelink_extlib Changes

Issue # Issue Details Application impacted Resolution Remarks
1 MCU Application images /sys/mcuimg1, /sys/mcuimg2 and /sys/mcuimg3 which are used for OTA update should never be created as fail-safe either from the programmer like uniflash or during run time by OTA library.The OTA lib by default opens all files for write with the fail-safe flags, which can cause this issue. The suggested fix ensures that during run time OTA library doesn't try to create MCU images with fail-safe flags.

Issue:In a specific use case wherein SFLASH is almost full the OTA could get into improper state. This particular case is when a file that was created without fail-safe flag, wasn't closed properly during the write sequence(e.g. power-failure) and then in the next write was opened for write with the fail-safe. In this particular case the file system will try to allocate additional instance for this file, which will return -30 if the SFLASH is almost full.

Examples/Applications using simplelink_extlib\flc,ota library/source Replace the sl_extlib_FlcOpenFile API found in file cc3200-sdk\simplelink_extlib\flc\flc.c with below API:
_i32 sl_extlib_FlcOpenFile(_u8 *file_name, _i32 file_size,
        _u32 *ulToken, _i32 *lFileHandle, _i32 open_flags)
{
  if(open_flags == _FS_MODE_OPEN_READ)
  {
    return sl_FsOpen((_u8 *)file_name,
          _FS_MODE_OPEN_READ, ulToken, lFileHandle);
  }
  else
  {
    /* MCU image name should be changed */
    if(strstr((char *)file_name, "/sys/mcuimgA") != NULL)
    {
      /* mcuimg1 is for factory default,
      mcuimg2,3 are for OTA updates */
      file_name[11] = (_u8)_McuImageGetNewIndex() + '1';
      /* make sure that the file is not opened as
      fail-safe since it might fill the entire SFLASH and
      it is not required for the MCU image */
      open_flags &= ~_FS_FILE_OPEN_FLAG_COMMIT;
      Report("sl_extlib_FlcOpenFile: MCU image"
              "name converted to %s \r\n", file_name);
    }
    return sl_FsOpen((_u8 *)file_name, 
                     FS_MODE_OPEN_CREATE(file_size, open_flags), 
                     ulToken, lFileHandle);
  }
}

Simplelink Changes

Issue # Issue Details Application impacted Resolution Remarks
1 CW (carrier wave) mode not working during transceiver mode RadioTool CW mode testing will not work. Change the following statement at line 805 of cc3200-sdk\simplelink\source\driver.c from:
if (pCmdExt && pCmdExt->RxPayloadLen < 0 && pCmdExt->TxPayloadLen)

to

if (pCmdExt && pCmdExt->RxPayloadLen < 0)
This fix will enable the CW to function correctly. However, since the change applies directly to the Simplelink Host Driver and this change hasn't been tested throughly by TI, the potential side effect of this change is unknown.

If the application doesn't use CW mode, this change is not needed.

Oslib Changes

Issue # Issue Details Application impacted Resolution Remarks
1 Calling osi_TaskDelete(NULL) by a task to kill itself cause a crash as there is no NULL check in implementation. FreeRTOS based application that using osi_TaskDelete() API OsiTaskHandle tHandle = NULL;

osi_TaskDelete(&tHandle);

Applications Changes

Issue # Issue Details Application impacted Resolution Remarks
1 wifi_audio_apllication doesn't work if enable play audio only by initializing RecordPlay with I2S_MODE_TX wifi_audio_application The issue was due to wrong if condition in main.c and has to modified as follows:
--- main.c Fri Jan 16 06:21:11 2015
+++ main.c Thu Apr 09 12:10:24 2015
@@ -275,7 +275,7 @@
//
// Create RX and TX Buffer
//
- if(RecordPlay & I2S_MODE_TX)
+ if(RecordPlay == I2S_MODE_RX_TX)
{
pRecordBuffer = CreateCircularBuffer(RECORD_BUFFER_SIZE);
if(pRecordBuffer == NULL)
@@ -286,7 +286,7 @@
}

/* Play */
- if(RecordPlay == I2S_MODE_RX_TX)
+ if(RecordPlay & I2S_MODE_TX)
{
pPlayBuffer = CreateCircularBuffer(PLAY_BUFFER_SIZE);
if(pPlayBuffer == NULL)
@@ -341,12 +341,12 @@
// Initialize the DMA Module
//
UDMAInit();
- if(RecordPlay == I2S_MODE_RX_TX)
+ if(RecordPlay & I2S_MODE_TX)
{
UDMAChannelSelect(UDMA_CH5_I2S_TX, NULL);
SetupPingPongDMATransferRx(pPlayBuffer);
}
- if(RecordPlay & I2S_MODE_TX)
+ if(RecordPlay == I2S_MODE_RX_TX)
{
UDMAChannelSelect(UDMA_CH4_I2S_RX, NULL);
SetupPingPongDMATransferTx(pRecordBuffer);


--- microphone.c Fri Jan 16 06:21:11 2015
+++ microphone.c Thu Apr 09 12:10:24 2015
@@ -63,7 +63,7 @@
extern int g_iReceiveCount;
extern unsigned long g_ulStatus;
extern volatile unsigned char g_ucMicStartFlag;
-extern int g_loopback;
+extern char g_loopback;
extern tCircularBuffer *pPlayBuffer;
extern tCircularBuffer *pRecordBuffer

2 Sometime CC3200 LP is not coming out from loopback mode as LPs not able to connect to each other using mDNS wifi_audio_application --- wifi_audio_app/control.c Thu Jan 15 03:35:16 2015
+++ wifi_audio_app/control.c Mon Jun 29 14:58:56 2015
@@ -90,6 +90,7 @@br />
volatile unsigned char g_ucMicStartFlag = 0;
volatile unsigned char g_ucSpkrStartFlag = 0;
+extern unsigned char g_loopback;

//*****************************************************************************
//
@@ -128,7 +129,9 @@
osi_Sleep(50);
}
g_ucMicStartFlag = 1;
-
+#ifdef MULTICAST
+ g_loopback = 0;
+#endif
}
else
{
@@ -212,6 +213,7 @@
osi_Sleep(50);
}
g_ucSpkrStartFlag = 1;
+ g_loopback = 0;
}
else
{
3 Missing packet ID while sending the data over UDP socket Iperf may recognize the packet as Out of Order. Modify "<cc3200-sdk>/examples/udp_socket/main.c" as per below:

@line 819

- long            lLoopCount = 0;
+ _u32            lLoopCount = 0;

@line 848

    while (lLoopCount < g_ulPacketCount)
    {
+   	g_cBsdBuf[0] = lLoopCount >> 24  & 0xFF;
+   	g_cBsdBuf[1] = lLoopCount >> 16  & 0xFF;
+   	g_cBsdBuf[2] = lLoopCount >> 8  & 0xFF;
+   	g_cBsdBuf[3] = lLoopCount & 0xFF;
 
        // sending packet
        iStatus = sl_SendTo(iSockID, g_cBsdBuf, sTestBufLen, 0,
                                (SlSockAddr_t *)&sAddr, iAddrSize);
        if( iStatus <= 0 )
        {
            // error
            sl_Close(iSockID);
            ASSERT_ON_ERROR(SEND_ERROR);
        }
        lLoopCount++;
    }
This fix is needed due to specific UDP packet format required by the Iperf.
More details @ http://e2e.ti.com/support/wireless_connectivity/f/968/p/401434/1429326#1429326
4 Interrupts and DMA requests for GPIO and I2C modules don't work after wake-up from LPDS. This is because the initial configuration done is lost after LPDS All the examples, Applications which exercise LPDS Add below code to start of PRCMCC3200MCUInit API in file "<cc3200-sdk>/driverlib/prcm.c" :
  if( PRCMSysResetCauseGet() == PRCM_LPDS_EXIT )
  {
      unsigned long ulRegVal;
 
      //
      // I2C Configuration
      //
      ulRegVal = HWREG(COMMON_REG_BASE + COMMON_REG_O_I2C_Properties_Register);
      ulRegVal = (ulRegVal & ~0x3) | 0x1;
      HWREG(COMMON_REG_BASE + COMMON_REG_O_I2C_Properties_Register) = ulRegVal;
 
      //
      // GPIO configuration
      //
      ulRegVal = HWREG(COMMON_REG_BASE + COMMON_REG_O_GPIO_properties_register);
      ulRegVal = (ulRegVal & ~0x3FF) | 0x155;
      HWREG(COMMON_REG_BASE + COMMON_REG_O_GPIO_properties_register) = ulRegVal;
  }

Driverlib changes

Issue # Issue Details Application impacted Resolution Remarks
1 PRCMSOCReset() API doesn't work reliably. Any application that using PRCMSOCReset() API we suggest avoiding usage of this API. As a replacement for this API our suggestion is to use Utils_TriggerHibCycle() API. Utils_TriggerHibCycle() sets the Slow Clock counter as the wake source for hibernate with a configurable hibernate duration and enters hibernate. After the configured hibernate duration expires SOC wakes up as if from a SOC reset.
2 Calling TimerConfigure() with DEBUG macro cause assert Any application that using TimerConfigure() API with DEBUG macro --- timer.c Tue Feb 10 02:44:17 2015
+++ timer.c Mon Apr 13 11:09:02 2015
@@ -184,26 +184,26 @@
TimerConfigure(unsigned long ulBase, unsigned long ulConfig)
{

- ASSERT((ulConfig == TIMER_CFG_ONE_SHOT) ||
- (ulConfig == TIMER_CFG_ONE_SHOT_UP) ||
- (ulConfig == TIMER_CFG_PERIODIC) ||
- (ulConfig == TIMER_CFG_PERIODIC_UP) ||
- ((ulConfig & 0xff000000) == TIMER_CFG_SPLIT_PAIR));
- ASSERT(((ulConfig & 0xff000000) != TIMER_CFG_SPLIT_PAIR) ||
- ((((ulConfig & 0x000000ff) == TIMER_CFG_A_ONE_SHOT) ||
- ((ulConfig & 0x000000ff) == TIMER_CFG_A_ONE_SHOT_UP) ||
- ((ulConfig & 0x000000ff) == TIMER_CFG_A_PERIODIC) ||
- ((ulConfig & 0x000000ff) == TIMER_CFG_A_PERIODIC_UP) ||
- ((ulConfig & 0x000000ff) == TIMER_CFG_A_CAP_COUNT) ||
- ((ulConfig & 0x000000ff) == TIMER_CFG_A_CAP_TIME) ||
- ((ulConfig & 0x000000ff) == TIMER_CFG_A_PWM)) &&
+ ASSERT( (ulConfig == TIMER_CFG_ONE_SHOT) ||
+ (ulConfig == TIMER_CFG_ONE_SHOT_UP) ||
+ (ulConfig == TIMER_CFG_PERIODIC) ||
+ (ulConfig == TIMER_CFG_PERIODIC_UP) ||
+ (((ulConfig & 0xff000000) == TIMER_CFG_SPLIT_PAIR) &&
+ ((((ulConfig & 0x000000ff) == TIMER_CFG_A_ONE_SHOT) ||
+ ((ulConfig & 0x000000ff) == TIMER_CFG_A_ONE_SHOT_UP) ||
+ ((ulConfig & 0x000000ff) == TIMER_CFG_A_PERIODIC) ||
+ ((ulConfig & 0x000000ff) == TIMER_CFG_A_PERIODIC_UP) ||
+ ((ulConfig & 0x000000ff) == TIMER_CFG_A_CAP_COUNT) ||
+ ((ulConfig & 0x000000ff) == TIMER_CFG_A_CAP_TIME) ||
+ ((ulConfig & 0x000000ff) == TIMER_CFG_A_PWM)) ||
(((ulConfig & 0x0000ff00) == TIMER_CFG_B_ONE_SHOT) ||
- ((ulConfig & 0x0000ff00) == TIMER_CFG_B_ONE_SHOT_UP) ||
- ((ulConfig & 0x0000ff00) == TIMER_CFG_B_PERIODIC) ||
- ((ulConfig & 0x0000ff00) == TIMER_CFG_B_PERIODIC_UP) ||
- ((ulConfig & 0x0000ff00) == TIMER_CFG_B_CAP_COUNT) ||
- ((ulConfig & 0x0000ff00) == TIMER_CFG_B_CAP_TIME) ||
- ((ulConfig & 0x0000ff00) == TIMER_CFG_B_PWM))));
+ ((ulConfig & 0x0000ff00) == TIMER_CFG_B_ONE_SHOT_UP) ||
+ ((ulConfig & 0x0000ff00) == TIMER_CFG_B_PERIODIC) ||
+ ((ulConfig & 0x0000ff00) == TIMER_CFG_B_PERIODIC_UP) ||
+ ((ulConfig & 0x0000ff00) == TIMER_CFG_B_CAP_COUNT) ||
+ ((ulConfig & 0x0000ff00) == TIMER_CFG_B_CAP_TIME) ||
+ ((ulConfig & 0x0000ff00) == TIMER_CFG_B_PWM)))));
+

//
// Enable CCP to IO pat
3 Flash get lock after entering in LPDS mode on HZ device. idle_profile, idle_profile_nonos, sennsor_profile, and any other application using PRCMLPDSEnter() API. --- driverlib/prcm.c Tue Feb 10 02:44:17 2015
+++ driverlib/prcm.c Wed Apr 22 19:22:11 2015
@@ -629,12 +630,17 @@
PRCMLPDSEnter()
{
volatile unsigned long ulDelay;
+ unsigned long ulChipId;
+
+ //
+ // Read the Chip ID
+ //
+ ulChipId = ((HWREG(GPRCM_BASE + GPRCM_O_GPRCM_EFUSE_READ_REG2) >> 16) & 0x1F);
//
// Check if flash exists
//
- if( (HWREG(GPRCM_BASE + GPRCM_O_GPRCM_EFUSE_READ_REG2) & 0x00110000)
- == 0x00110000 )
+ if( (0x11 == ulChipId) || (0x19 == ulChipId))
{
//
4 After setting the hibernate wake up source as rising edge other type of wake source can’t be configured. idle_profile, idel_profile_nonos and any other application using PRCMHibernateWakeUpGPIOSelect() API --- driverlib/prcm.c Tue Feb 10 02:44:17 2015
+++ driverlib/prcm.c Wed Apr 22 19:22:11 2015
@@ -1180,7 +1186,7 @@
if(ulGPIOBitMap & (1<<ucLoop))
{
ulRegValue = PRCMHIBRegRead(HIB3P3_BASE+HIB3P3_O_MEM_GPIO_WAKE_CONF);
- ulRegValue |= (ulType << (ucLoop*2));
+ ulRegValue = (ulRegValue & (~(0x3 << (ucLoop*2)))) | (ulType <<(ucLoop*2));
PRCMHIBRegWrite(HIB3P3_BASE+HIB3P3_O_MEM_GPIO_WAKE_CONF, ulRegValue);
}
}
5 Not able to disable SPI DMA Any user application that using SPIDmaDisable() API --- driverlib/spi.c Thu Jan 15 03:35:14 2015
+++ driverlib/spi.c Mon Jun 29 15:02:41 2015
@@ -640,7 +640,7 @@
//
// Disable DMA based on ulFlags
//
- HWREG(ulBase + MCSPI_O_CH0CONF) &= ulFlags;
+ HWREG(ulBase + MCSPI_O_CH0CONF) &= ~ulFlags;
}

//*****************************************************************************

Netapps Changes

Issue # Issue Details Application impacted Resolution Remarks
1 MQTT library: disconnect callback is getting invoked only in the case of non-blocking mode of APIs. MQTT client, MQTT server
--- a/netapps/mqtt/sl/sl_mqtt_client.c

+++ b/netapps/mqtt/sl/sl_mqtt_client.c
@@ -207,11 +207,9 @@ static void process_disconn_cb(void *app, _i32 cause) client_ctx->awaited_ack = MQTT_DISCONNECT;
ACK_RX_SIGNAL_POST(&client_ctx->ack_sync_obj);
} else {
- if(false == client_ctx->blocking_send) {
- /* Invoke the disconnect callback */
- client_ctx->app_cbs.sl_ExtLib_MqttDisconn(
- client_ctx->app_hndl);
- }
+ /* Invoke the disconnect callback */
+ client_ctx->app_cbs.sl_ExtLib_MqttDisconn(
+ client_ctx->app_hndl);
}
return;

2 MQTT library: Memory is not being freed in case of failed MQTT connection. MQTT client, MQTT server --- a/netapps/mqtt/client/mqtt_client.c
+++ b/netapps/mqtt/client/mqtt_client.c
@@ -773,10 +773,10 @@ i32 connect_msg_send(struct client_ctx *cl_ctx, bool clean_session, u16 ka_secs)
ref = MQP_FHEADER_BUF(mqp);
- /* Following routine frees up MQP - whether error or not */
- return cl_ctx_conn_state_try_locked(cl_ctx, ref, buf - ref,
- ka_secs, clean_session,
- mqp);
+ rv = cl_ctx_conn_state_try_locked(cl_ctx, ref, buf - ref,
+ ka_secs, clean_session,
+ mqp);
+
connect_msg_send_exit1:
3 MQTT library: socket in not closed in case of DNS failure. MQTT client, MQTT server +++ b/netapps/mqtt/platform/cc31xx_sl_net.c
@@ -258,6 +258,7 @@ _i32 comm_open(_u32 nwconn_opts, const char *server_addr, _u16 port_number,
strlen(server_addr), (_u32*) &uiIP, SL_AF_INET);

if (Status < 0) {
+ sl_Close(MqttSocketFd);
PRINTF("\n\r ERROR: Could not resolve the ip address of the server \n\r");
return (-1);
}


Pinmux changes

Issue # Issue Details Application impacted Resolution Remarks
1 Pin 45 and 52 are available on CC3200 default variants devices but Pinmux Tool V3.0.625 can't configure these pins. Download attached zip file(File:DeviceData.zip) and replace the existing "deviceData" folder under <root>\pinmux\deviceData with the new one in the attached zip.
2 All GPIO pins default to Mode-1 on power-up, unless programmed by the MCU. Set all un-used pins except the serial flash SPI (pin#11, 12, 13, 14) and JTAG pins (16, 17, 19, 20) to Mode-0 to prevent any bus contention. For e.g. By default I2C is muxed onto Pins 01 and 02 and if the application muxes I2C onto some other pins say 03 and 04. This would cause contention. Applications that have configured I2C onto pins other than 01 and 02. To set any pin(PIN_X) to Mode-0 use the API PinModeSet(PIN_X,PIN_MODE_0);

Specifically to resolve contention on I2C lines Add following code snippet to void PinMuxConfig(void) PinModeSet(PIN_01,PIN_MODE_0); PinModeSet(PIN_02,PIN_MODE_0);

3 Pkg Pin #17 (Pin Alias TDO) is driven high during hibernate when device is operating in SOP mode "Fn2WJ(Functional mode with a 2-wire SWD mapped to fixed pins)". If this pin is used to connect some other device which has a conflicting drive then there could be current leakage in hibernate mode. Applications that are using Pkg Pin #17 and are operating in SOP mode "Fn2WJ". In order to "Hi-Z" Pkg Pin #17 while entering hibernate and bringing the pin back to normal mode after hibernate below code needs to be exercised.

Add below lines of code to start of PRCMHibernateEnter() API. This ensures Pin #17 is "Hi-Z"ed when device enters hibernate. HWREG(0x4402FC14) |= 0x100; HWREG(0x4402FC14) &= ~0x2;

Add below lines of code to start of PRCMCC3200MCUInit() API.This ensures Pin #17 is brought to normal state when device wakes up after hibernate. HWREG(0x4402FC14) &= ~0x100; HWREG(0x4402FC14) |= 0x2;

SDK 1.0.0 Known issues

Linker File changes

Issue # Problem statement Comments Workaround/Fix Current Status
1 Blinky example RAM size defined in IAR(cc3200.icf) is not 240KB. Blinky example demonstrates 240KB of ES 1.33 device RAM
size in IDEs (CCS and GCC) but in IAR RAM block size defined wrongly.
Modify blinky\ewarm\cc3200.icf file:

// SRAM size of 240KB for CC3200 ES 1.33 device
define region SRAM = mem:[from 0x20004000 to 0x20040000];

open

Driverlib API changes

Issue # Issue Details Application impacted Resolution Remarks
1 PRCMSOCReset() API doesn't work reliably. Any application that using PRCMSOCReset() API we suggest avoiding usage of this API. As a replacement for this API our suggestion is to use Utils_TriggerHibCycle() API. Utils_TriggerHibCycle() sets the Slow Clock counter as the wake source for hibernate with a configurable hibernate duration and enters hibernate. After the configured hibernate duration expires SOC wakes up as if from a SOC reset.

Driverlib Changes

Issue # Issue Details Application impacted Resolution Remarks
1 Camera application hangs on using PCLK polarity as falling edge. Erroneous operation on HS polarity low. Camera applications using PCLK polarity as falling edge or HS polarity low. The issue was seen due to a typo error in the macro values. The driverlib file camera.h has to be updated as follows:
--- camera.h Fri May 30 15:29:08 2014
+++ camera.h Tue Oct 14 14:31:06 2014
@@ -82,12 +82,12 @@
// Value that can be passed to CameraXClkConfig().
//*****************************************************************************
#define CAM_HS_POL_HI 0x00000000
-#define CAM_HS_POL_LO 0000000200
+#define CAM_HS_POL_LO 0x00000200
#define CAM_VS_POL_HI 0x00000000
#define CAM_VS_POL_LO 0x00000100
#define CAM_PCLK_RISE_EDGE 0x00000000
-#define CAM_PCLK_FALL_EDGE 0000000400
+#define CAM_PCLK_FALL_EDGE 0x00000400
#define CAM_ORDERCAM_SWAP 0x00000800
#define CAM_NOBT_SYNCHRO 0x00002000
2 Build error when DEBUG macro is enabled in driverlib. Applications using the DEBUG option while building driverlib. Unsupported macro usage removed. --- uart.c Tue Apr 29 19:45:02 2014
+++ uart.c Tue Oct 14 11:59:04 2014
@@ -596,7 +596,7 @@
//
ASSERT(ulBase == UARTA1_BASE);
- ASSERT((ulControl & ~(UART_OUTPUT_RTS | UART_OUTPUT_DTR)) == 0);
+ ASSERT((ulControl & ~(UART_OUTPUT_RTS)) == 0);
//
// Set the appropriate modem control output bits.
@@ -637,7 +637,7 @@
// Check the arguments.
//
ASSERT(ulBase == UARTA1_BASE);
- ASSERT((ulControl & ~(UART_OUTPUT_RTS | UART_OUTPUT_DTR)) == 0);
+ ASSERT((ulControl & ~(UART_OUTPUT_RTS)) == 0);
//
// Set the appropriate modem control output bits.


SimpleLink Changes

Issue # Issue Details Application impacted Resolution Remarks
1 Issue seen when the SPI transfers are performed both over

DMA and CPU during the transactions.

CPU mode is used for transactions that are of smaller length
and also for non 4 byte aligned buffers. In the cases when
there is a switch from a previous DMA transaction to a
transaction using CPU mode and mode and the previous transfer (DMA) was smaller than the current transfer (CPU), the reported issue is seen. The resolution is to reset the SPI word count.

It is recommended that all applications incorporate this

change as the issue is dependent on the nature of SPI transactions.

--- a/simplelink/cc_pal.c
+++ b/simplelink/cc_pal.c
@@ -591,6 +591,7 @@ int spi_Read(Fd_t fd, unsigned char *pBuff, int len)
}
else
{
+ MAP_SPIWordCountSet(LSPI_BASE,0);
read_size += spi_Read_CPU(pBuff,len);
}
return read_size;
@@ -643,6 +644,7 @@ int spi_Write(Fd_t fd, unsigned char *pBuff, int len)

else
{
+ MAP_SPIWordCountSet(LSPI_BASE,0);
write_size += spi_Write_CPU(pBuff,len);
}
return write_size;


Middleware Changes

Issue # Issue Details Application impacted Resolution Remarks
1 Issue with the monotonic timer usage. Any application trying to use monotonic timer provided by power management freamework. Uninitialized variables (including a timer structure and linked list field) are the reason behind this issue
--- a/middleware/framework/timer/cc_timer.c
+++ b/middleware/framework/timer/cc_timer.c
@@ -407,6 +407,8 @@ @@ static void insert_ordered_expiry(struct sw_timer *elem, struct sw_timer **list)<>br / { struct sw_timer *node = *list, *prev = NULL;
+ elem->next = NULL; /* Remove stale reference / info, if any */
+
if(NULL == node) { /* First user request for the HW timer */
*list = elem;
goto sort_insert_elem_exit1;

@@ -583,6 +585,7 @@ static i32 remove_elem(struct sw_timer *elem, struct sw_timer **list)
else
prev->next = node->next;
+ elem->next = NULL; /* Reset */
rv = 0;
break; /* Exit while loop */
}

@@ -649,7 +652,7 @@ static void process_timer_expiry(struct hwt_info *hwt)
struct sw_timer *head = hwt->used_list;
while(head) { /* Run through list to process all expired timers */
- struct u64_val hwt_current;
+ struct u64_val hwt_current = {0, 0};
if(0 != hwt_get_current(head->hwt_obj, &hwt_current))
goto handle_timer_expiry_exit1;


Applications Changes

Issue # Issue Details Application impacted Resolution Remarks
1 SDHost FatFS application hangs if tried to write large files. Any application trying to use block writes/reads over SD Card interface. The issue was due to a typo in sdhost.c and has to modified as follows:
--- sdhost.c Fri Jun 20 18:21:24 2014
+++ sdhost.c Tue Nov 04 14:09:53 2014
@@ -732,7 +732,7 @@
//
// Set the number of blocks
//
- HWREG(ulBase + MMCHS_O_BLK) |= ((ulRegVal & 0x0000FFFF)|
+ HWREG(ulBase + MMCHS_O_BLK) = ((ulRegVal & 0x0000FFFF)|(ulBlkCount << 16));
}
2 SDHost_fatFS application; Newly written files getting corrupted/not properly closed. Any application reusing this diskio.c implementation for SD Card block write/read. The issue was due to not waiting for ‘transfer complete’ after transaction stop command in case of multi block writes. The source diskio.c has to modified as follows: --- diskio.c Sat Jun 07 17:57:18 2014
+++ diskio.c Tue Nov 04 16:28:31 2014
@@ -504,7 +504,17 @@
MAP_SDHostDataRead(SDHOST_BASE,(unsigned long *)pBuffer);
pBuffer+=4;
}
+
CardSendCmd(CMD_STOP_TRANS,0);
+
+ //
+ // Wait for command to complete
+ //
+ while( !(MAP_SDHostIntStatus(SDHOST_BASE) & SDHOST_INT_TC) )
+ {
+
+ }
+
Res = RES_OK;
}
}
@@ -626,7 +636,17 @@
{
}
+
CardSendCmd(CMD_STOP_TRANS,0);
+
+ //
+ // Wait for command to complete
+ //
+ while( !(MAP_SDHostIntStatus(SDHOST_BASE) & SDHOST_INT_TC) )
+ {
+
+ }
+
Res = RES_OK;
}
}
3 SDHost interface expects pull-ups on Data and CMD Line. SDHost Application For SDHost and SDHost_FatFS example Application pinmux.c has to be changed as follows:
--- pinmux.c Thu Jul 31 15:27:50 2014
+++ pinmux.c Tue Nov 04 13:51:51 2014
@@ -75,6 +75,7 @@
// Configure PIN_06 for SDHOST0 SDHost_D0
//
MAP_PinTypeSDHost(PIN_06, PIN_MODE_8);
+ MAP_PinConfigSet(PIN_06, PIN_STRENGTH_6MA,PIN_TYPE_STD_PU);
//
// Configure PIN_07 for SDHOST0 SDHost_CLK
@@ -85,4 +86,5 @@
// Configure PIN_08 for SDHOST0 SDHost_CMD
//
MAP_PinTypeSDHost(PIN_08, PIN_MODE_8);
+ MAP_PinConfigSet(PIN_08, PIN_STRENGTH_6MA,PIN_TYPE_STD_PU);
}
4 Idle profile application doesn't connect to the AP with security enabled. Idle profile. The issue was due to wrong assignment of security key length
--- a/example/idle_profile/main.c
+++ b/example/idle_profile/main.c
@@ -507,7 +507,7 @@ int WlanConnect()
SlSecParams_t secParams;
secParams.Key = (signed char *)SECURITY_KEY;
- secParams.KeyLen = sizeof(secParams.Key);
+ secParams.KeyLen = strlen((const char *)secParams.Key);
secParams.Type = SECURITY_TYPE;
// }
5 Sensor profile application doesn't connect to the AP with security enabled. Sensor profile. The issue was due to wrong assignment of security key length
--- a/example/sensor_profile/main.c
+++ b/example/sensor_profile/main.c
@@ -510,7 +510,7 @@ int WlanConnect()
SlSecParams_t secParams;
secParams.Key = (signed char *)SECURITY_KEY;
- secParams.KeyLen = sizeof(secParams.Key);
+ secParams.KeyLen = strlen((const char *)secParams.Key);
secParams.Type = SECURITY_TYPE;
// }


SDK 0.5.2 Known issues

Device APIs

Issue # Problem statement Comments Workaround/Fix Current Status
1 If the CC3200 device is in AP mode and application execute sl_Start, Next API after sl_Start sometimes get stuck in SPI Read. The current suspicion is on SimpleLink SPI command handling. Workaround: Need to change code snippet in ConfigureSimpleLinkToDefaultState function of Networking examples Open
long ConfigureSimpleLinkToDefaultState()

{
.
.
lMode = sl_Start(0, 0, 0);
if (ROLE_AP == lMode)
{
// If the device is in AP mode, we need to wait for this event
// before doing anything while(!IS_IP_ACQUIRED(g_ulStatus))
{
#ifndef SL_PLATFORM_MULTI_THREADED
_SlNonOsMainLoopTask();
#endif
} }
// Get the device's version-information
ucConfigOpt = SL_DEVICE_GENERAL_VERSION;
ucConfigLen = sizeof(ver);

lRetVal = sl_DevGet(SL_DEVICE_GENERAL_CONFIGURATION, &ucConfigOpt, &ucConfigLen, (unsigned char *)(&ver));
ASSERT_ON_ERROR(__LINE__, lRetVal);
.
.