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.

CC3135MOD: SL_API_ABORTED (-2005) after sl_start

Part Number: CC3135MOD
Other Parts Discussed in Thread: CC3100, CC3135, CC3100MOD

Hi,

We are trying to port CC3135MOD host driver onto STM32F429 MCU with no rtos and no multi-thread.

We programmed CC3135MOD with sp_4.11.0.0_3.7.0.1_3.1.0.26.bin in SDK version 5.20.00.06.

With SWRU455m Chapter 19 Porting Guide and other threads in E2E Forum, we modified user.h, nortos.c/h files.

After running the code with sl_Start, we got the followings from SPI lines.

spi_Open

spi_Open done

spi_Write 4 65 87 78 56

spi_Read 8 00 00 00 00 00 00 00 00

spi_Read 4 BC DC CD AB

spi_Read 4 08 00 14 00

spi_Read 8 24 00 04 06 00 00 00 00

spi_Read 12 2B 57 00 08 2D 57 00 08 2F 57 00 08

sl_Start Fail -2005

1. are these SPI_Read right response from CC3135MOD?

2. if SPI seems to be working fine, please advise me where to look at to fix this issue?

We are trying to fix these issues for a few weeks, and looking over and over at user manual, porting guide and E2E forum and CC3100 sample code for nortos,

but can not get the clue to fix these issues.

For your review, I attached my user.h, nortos.h and c file.

0638.user.h

0250.nonos.c
/*
 * nonos.c - CC31xx/CC32xx Host Driver Implementation
 *
 * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ 
 * 
 * 
 *  Redistribution and use in source and binary forms, with or without 
 *  modification, are permitted provided that the following conditions 
 *  are met:
 *
 *    Redistributions of source code must retain the above copyright 
 *    notice, this list of conditions and the following disclaimer.
 *
 *    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.
 *
 *    Neither the name of Texas Instruments Incorporated 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 
 *  OWNER 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 files                                                             */
/*****************************************************************************/
#include <ti/drivers/net/wifi/simplelink.h>
#include <ti/drivers/net/wifi/source/protocol.h>
#include <ti/drivers/net/wifi/source/driver.h>

#ifndef SL_PLATFORM_MULTI_THREADED

#include "nonos.h"

_SlNonOsCB_t g__SlNonOsCB;

_SlNonOsRetVal_t _SlNonOsSpawn(_SlSpawnEntryFunc_t pEntry , void* pValue , _u32 flags)
{
    _i8 i = 0;

    /* The parameter is currently not in use */
    (void)flags;


    for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
    {
        _SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];

        if (pE->IsAllocated == FALSE)
        {
            pE->pValue = pValue;
            pE->pEntry = pEntry;
            pE->IsAllocated = TRUE;
            break;
        }
    }

    return NONOS_RET_OK;
}

_SlNonOsRetVal_t _SlNonOsHandleSpawnTask(void)
{
    _i8    i=0;
    void*  pValue;

    for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
    {
        _SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];

        if (pE->IsAllocated == TRUE)
        {
            _SlSpawnEntryFunc_t  pF = pE->pEntry;
            pValue = pE->pValue;

            /* Clear the entry */
            pE->pEntry = NULL;
            pE->pValue = NULL;
            pE->IsAllocated = FALSE;

            /* execute the spawn function */
            pF(pValue);
        }
    }
        return NONOS_RET_OK;
}

void tiDriverSpawnCallback(void)
{
    /* If we are in cmd context and waiting for its cmd response
     * do not handle async events from spawn, as the global lock was already taken when sending the command,
     * and the Async event would be handled in read cmd context, so we do nothing.
     */
    if (FALSE == g_pCB->WaitForCmdResp)
    {
        (void)_SlNonOsHandleSpawnTask();
    }
}

_SlNonOsRetVal_t _SlNonOsSemGet(_SlNonOsSemObj_t* pSyncObj, _SlNonOsSemObj_t WaitValue, _SlNonOsSemObj_t SetValue, _SlNonOsTime_t Timeout)
{
#if (!defined (SL_TINY)) && (defined(sl_GetTimestamp))
      _SlTimeoutParams_t      TimeoutInfo={0};
#endif

	 /* If timeout 0 configured, just detect the value and return */
      if ((Timeout ==0) && (WaitValue == *((volatile _u8 *)pSyncObj)) )
	  {
		  *pSyncObj = SetValue;
		  return NONOS_RET_OK;
	  }

#if (!defined (SL_TINY)) && (defined(sl_GetTimestamp))
      if ((Timeout != NONOS_WAIT_FOREVER) && (Timeout != NONOS_NO_WAIT))
      {
    	  _SlDrvStartMeasureTimeout(&TimeoutInfo, Timeout);
      }
#endif

#ifdef _SlSyncWaitLoopCallback
    _SlNonOsTime_t timeOutRequest = Timeout; 
#endif
    while (Timeout>0)
    {
        if (WaitValue == *((volatile _u8 *)pSyncObj))
        {
            *pSyncObj = SetValue;
            break;
        }
#if (!defined (sl_GetTimestamp)) ||  (defined (SL_TINY_EXT))
        if (Timeout != NONOS_WAIT_FOREVER)
        {		
            Timeout--;
        }
#else        
        if ((Timeout != NONOS_WAIT_FOREVER) && (Timeout != NONOS_NO_WAIT))
        {
            if (_SlDrvIsTimeoutExpired(&TimeoutInfo))
            {
            	return (_SlNonOsRetVal_t)NONOS_RET_ERR;
            }

        }
 #endif       

        /* If we are in cmd context and waiting for its cmd response
         * do not handle spawn async events as the global lock was already taken */
        //if (FALSE == g_pCB->IsCmdRespWaited)  //dskim
        if (FALSE == g_pCB->WaitForCmdResp)
        {
        (void)_SlNonOsMainLoopTask();
        }
#ifdef _SlSyncWaitLoopCallback
        if( (__NON_OS_SYNC_OBJ_SIGNAL_VALUE == WaitValue) && (timeOutRequest != NONOS_NO_WAIT) )
        {
            if (WaitValue == *((volatile _u8 *)pSyncObj))
            {
                *pSyncObj = SetValue;
                break;
            }
            _SlSyncWaitLoopCallback();
        }
#endif
    }

    if (0 == Timeout)
    {
        return NONOS_RET_ERR;
    }
    else
    {
        return NONOS_RET_OK;
    }
}

_SlNonOsRetVal_t _SlNonOsSemSet(_SlNonOsSemObj_t* pSemObj , _SlNonOsSemObj_t Value)
{
    *pSemObj = Value;
    return NONOS_RET_OK;
}

_SlNonOsRetVal_t _SlNonOsMainLoopTask(void)
{
	_i8 i=0;
	void*  pValue;

#ifndef SL_TINY_EXT
	for (i=0 ; i<NONOS_MAX_SPAWN_ENTRIES ; i++)
#endif
	{
		_SlNonOsSpawnEntry_t* pE = &g__SlNonOsCB.SpawnEntries[i];
		

		if (pE->IsAllocated == TRUE)
		{
			_SlSpawnEntryFunc_t  pF = pE->pEntry;
			pValue = pE->pValue;


			/* Clear the entry */
			pE->pEntry = NULL;
			pE->pValue = NULL;
			pE->IsAllocated = FALSE;

			/* execute the spawn function */
            pF(pValue);
		}
	}
        
        return NONOS_RET_OK;
}
#endif

1526.nonos.h

Thanks,

  • Hi Mark,

    Let me discuss this with the team and get back to you.

  • Hi,

    The first few transactions look OK. I can see the SYNC/CNYS and also the opcode and length parameters.

    The unexpected stream of bytes is the last one, i.e. spi_Read 12 2B 57 00 08 2D 57 00 08 2F 57 00 08.

    I would expect to see something like: spi_Read 0x11 0x11 0x11 0x11 0x00 0x00 0x00 0x30 0x00 0x00 0x00 0x00

    The first 4 bytes are the status for station (if AP role is set then it should be a series of 0x33), then the chip ID for CC3135 and finally it is a don't case.

    I don't see how it can be related to the porting if it is captured on the SPI lines.

    Shlomi

  • Hi Shlomi,

    do you mean that this issue can not be related to the porting?

    in fact, we downloaded the latest SDK ver7.10.00.13 and updated the service pack as well as the source codes, but still facing the same problem.

    So, we do not know what to do more?

    Thanks

  • Hi,

    I do not expect the packet to start OK and then show corrupted values.

    are these signals captured on the hardware SPI lines or in SW when already captured by the host?

    Shlomi

  • These SPI reads were from log of Host MCU.

    We also gave the large 200ms timing for nHIB,b but the result is the same as before (like below)

    spi_Open

    spi_Open done

    spi_Write 4 65 87 78 56

    spi_Read 8 00 00 00 00 00 00 00 00

    spi_Read 4 BC DC CD AB

    spi_Read 4 08 00 14 00

    spi_Read 8 24 00 04 06 00 00 00 00

    spi_Read 12 1F 57 00 08 21 57 00 08 23 57 00 08

    sl_Start Fail -2005

    Thanks

  • Hi Kim,

    Can you capture it directly from the SPI interface using a SPI logic?

    What SPI configuration are you using? i.e. what is the polarity and phase, speed, etc?

    Shlomi

  • Hi Shlomi,

    I copied cc_pal.c and cc_pal.h we used for SPI configuration.

    it has been lots of changes from the default one in SKD and even in PlugIn.

    At the moment, we are not able to get Logic Analyzer to capute SPI signals.

    So, we placed PO of CC3100MOD module to make sure that the hardware (SPI signals, nHIB and INTR) for Device Init is OK. 

    if you look at the attached cc_pal.c and cc_pal.h and then found out anything suspicious, please let me know,

    extern u32 gSys_Timer_G_1MS;

    //#define DEBUG_SPI_RXTX 1

    //****************************************************************************
    // LOCAL FUNCTIONS
    //****************************************************************************

    Fd_t spi_Open(char *ifName, unsigned long flags)
    {
    printf("\r\n spi_Open");
    hspi1.Instance = SPI2;
    hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
    hspi1.Init.Direction = SPI_DIRECTION_2LINES;
    hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
    hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
    hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
    hspi1.Init.CRCPolynomial = 7;
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
    hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
    hspi1.Init.NSS = SPI_NSS_SOFT;
    hspi1.Init.TIMode = SPI_TIMODE_DISABLE;

    hspi1.Init.Mode = SPI_MODE_MASTER;

    if(HAL_SPI_Init(&hspi1) != HAL_OK)
    {
    printf("\r\n HAL_SPI_Init Fail");
    }

    //NwpOff ();
    DEASSERT_CS;
    HAL_Delay(50);
    printf("\r\n spi_Open done");

    return 0;
    }

    3757.cc_pal.c
    /*
     * cc_pal.c - CC32xx Host Driver Implementation
     *
     * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ 
     * 
     * 
     *  Redistribution and use in source and binary forms, with or without 
     *  modification, are permitted provided that the following conditions 
     *  are met:
     *
     *    Redistributions of source code must retain the above copyright 
     *    notice, this list of conditions and the following disclaimer.
     *
     *    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.
     *
     *    Neither the name of Texas Instruments Incorporated 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 
     *  OWNER 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.
     *
    */
    /******************************************************************************
    *   cc_pal.c
    *
    *   SimpleLink Wi-Fi abstraction file for CC32xx
    ******************************************************************************/
    
    /* Board includes */
    #include <stdio.h>
    #include <ti/drivers/net/wifi/porting/cc_pal.h>
    #include <ti/drivers/net/wifi/wlan.h>
    #include "user.h"
    #include "../../../../../../Inc/main.h"
    #include <ti/drivers/net/wifi/simplelink.h>
    
    /****************************************************************************
       LOCAL FUNCTION DEFINITIONS
    ****************************************************************************/
    
    void NwpPowerOn(void)       { HAL_GPIO_WritePin (nHIB_GPIO_PORT, nHIB_PIN, GPIO_PIN_SET);  }
    void NwpPowerOff(void)      { HAL_GPIO_WritePin (nHIB_GPIO_PORT, nHIB_PIN, GPIO_PIN_RESET); HAL_Delay(200);}
    
    #define SPI_TIMEOUT         0x1000
    #define ASSERT_CS           ( HAL_GPIO_WritePin (GPIOB, GPIO_PIN_11, GPIO_PIN_RESET))
    #define DEASSERT_CS         ( HAL_GPIO_WritePin (GPIOB, GPIO_PIN_11, GPIO_PIN_SET))
    
    SPI_HandleTypeDef    hspi1;
    
    extern u32 gSys_Timer_G_1MS;
    
    //#define DEBUG_SPI_RXTX 1
    
    //****************************************************************************
    //                          LOCAL FUNCTIONS
    //****************************************************************************
    
    Fd_t spi_Open(char *ifName, unsigned long flags)
    {
        printf("\r\n spi_Open");    
        hspi1.Instance               = SPI2;
        hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
        hspi1.Init.Direction         = SPI_DIRECTION_2LINES;
        hspi1.Init.CLKPhase          = SPI_PHASE_1EDGE;
        hspi1.Init.CLKPolarity       = SPI_POLARITY_LOW; 
        hspi1.Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLE;
        hspi1.Init.CRCPolynomial     = 7;
        hspi1.Init.DataSize          = SPI_DATASIZE_8BIT;
        hspi1.Init.FirstBit          = SPI_FIRSTBIT_MSB;
        hspi1.Init.NSS               = SPI_NSS_SOFT;
        hspi1.Init.TIMode            = SPI_TIMODE_DISABLE;
        
        hspi1.Init.Mode = SPI_MODE_MASTER;
    
        if(HAL_SPI_Init(&hspi1) != HAL_OK)
        {
          printf("\r\n HAL_SPI_Init Fail");
        }
    
        //NwpOff ();
        DEASSERT_CS;
        HAL_Delay(50);
        printf("\r\n spi_Open done");
    
        return 0;
    }
    
    
    int spi_Close(Fd_t fd)
    {
       printf("\r\n spi_Close");
       HAL_SPI_DeInit (&hspi1);
       return 0;
    }
    
    
    int spi_Read(Fd_t fd, unsigned char *pBuff, int len)
    {    
        //  printf("\r\n spi_Read %d", len);    
        ASSERT_CS;    
        HAL_StatusTypeDef status = HAL_SPI_Receive (&hspi1, pBuff, len, SPI_TIMEOUT);
        DEASSERT_CS;
    #ifdef DEBUG_SPI_RXTX    
        printf("\r\n spi_Read %d", len); 
        for(int i=0; i<len; i++)
          printf(" %02X", pBuff[i]);
    #endif
        return len;
    }
    
    
    int spi_Write(Fd_t fd, unsigned char *pBuff, int len)
    {
    #ifdef DEBUG_SPI_RXTX  
        printf("\r\n spi_Write %d", len);
        for(int i=0; i<len; i++)
          printf(" %02X", pBuff[i]);
    #endif
        ASSERT_CS;    
        HAL_StatusTypeDef status = HAL_SPI_Transmit (&hspi1, pBuff, len, SPI_TIMEOUT);
        DEASSERT_CS;
        return len;
    }
    
    P_EVENT_HANDLER pISR = 0;
    
    int NwpRegisterInterruptHandler(P_EVENT_HANDLER InterruptHdl , void* pValue)
    {
        pISR = InterruptHdl;
        return 0;
    }
    
    
    void NwpMaskInterrupt()
    {
        HAL_NVIC_EnableIRQ (SPIWifi_IRQn);
    }
    
    
    void NwpUnMaskInterrupt()
    {
        HAL_NVIC_DisableIRQ (SPIWifi_IRQn);
    }
    
    
    
    /*
    
    int Mutex_create_handle(MutexP_Handle* pMutexHandle)
    {
        MutexP_Params params;
    
        MutexP_Params_init(&params);
    
        params.callback = tiDriverSpawnCallback;
    
        (*(pMutexHandle)) = MutexP_create(&params);
    
        if(!(*(pMutexHandle)))
        {
            return Mutex_FAILURE ;
        }
    
        return Mutex_OK;
    }
    
    int  MutexP_delete_handle(MutexP_Handle* pMutexHandle)
    {
        MutexP_delete(*(pMutexHandle));
        return(Mutex_OK);
    }
    
    int Mutex_unlock(MutexP_Handle pMutexHandle)
    {
        MutexP_unlock(pMutexHandle, 0);
        return(Mutex_OK);
    }
    
    
    int Mutex_lock(MutexP_Handle pMutexHandle)
    {
        MutexP_lock(pMutexHandle);
        return(Mutex_OK);
    }
    
    int SemaphoreP_create_handle(SemaphoreP_Handle* pSemHandle)
    {
        SemaphoreP_Params params;
    
        SemaphoreP_Params_init(&params);
    
        params.mode = SemaphoreP_Mode_BINARY;
    
        params.callback = tiDriverSpawnCallback;
    
        (*(pSemHandle)) = SemaphoreP_create(1, &params);
    
        if(!(*(pSemHandle)))
        {
            return Semaphore_FAILURE ;
        }
    
        return Semaphore_OK;
    }
    
    int SemaphoreP_delete_handle(SemaphoreP_Handle* pSemHandle)
    {
        SemaphoreP_delete(*(pSemHandle));
        return Semaphore_OK;
    }
    
    int SemaphoreP_post_handle(SemaphoreP_Handle* pSemHandle)
    {
        SemaphoreP_post(*(pSemHandle));
        return Semaphore_OK;
    }
    */
    
    
    unsigned long TimerGetCurrentTimestamp()
    {
       // return (ClockP_getSystemTicks());
      return gSys_Timer_G_1MS;
    }
    
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {  
      if((GPIO_Pin == WIFI_nATTN_PIN) && (NULL != pISR) )
      {       
       // printf("\r\n HAL_GPIO_EXTI_Callback %d", GPIO_Pin);    
        pISR();
      }
    }
    
    void NwpWaitForShutDownInd()
    {
      /*
        volatile unsigned long nwp_wakup_ind = HWREG(NWP_LPDS_WAKEUPCFG);
        _SlTimeoutParams_t SlTimeoutInfo = {0};
    
        _SlDrvStartMeasureTimeout(&SlTimeoutInfo, NWP_LPDS_WAKEUPCFG_TIMEOUT_MSEC);
    
        while(nwp_wakup_ind != NWP_LPDS_WAKEUPCFG_APPS2NWP)
        {
            if(_SlDrvIsTimeoutExpired(&SlTimeoutInfo))
            {
                return;
            }
            nwp_wakup_ind = HWREG(NWP_LPDS_WAKEUPCFG);
        }
    
        return ;
    */
    }
    
    6303.cc_pal.h

  • Hi Shlomi,

    Yes, we read STM porting guide you suggested and checked all the things with STM porting guide and user manual.

    This STM porting guide is basically with Multi Thread and RTOS, but we are using No RTOS.

    As for No RTOS, there is no clear guide on what need to be done on any of docouments, and just say to refer to CC3100 SDK.

    I am not sure if my nortos.h/c is right or not,  and then cause this issue due to wrong nortos.h/c file or somethings else like user.h, cc_pal.h/c.

    So, i want TI expert advise on this user.h, nortos.h/c, and cc_pal.h/c.

    It seems to be clear that this issue is not related to SPI hardware.

    Thanks,

  • Hi Mark,

    We can confirm this is not a SPI issue by looking at the SPI bus and then comparing with your SPI values earlier. Were you able to probe the bus with a logic analyzer or oscilloscope?

  • Hi Sabeeh,

    I am afraid we do not have a logic analyzer to capture SPI signals.

    As for oscilloscope data, I will send it to you next week.

    Thanks

  • OK, let us know when you have it.

  • Hi Shlomi,

    Here are the waveform you requested.

    1. Ch1: CLK, Ch2: MISO

    2.  Ch1: CLK, Ch2: nCS

    3.  Ch1; CLK, CH2: MISO

    4. Ch1: CLK, Ch2: IRQ

    5. Ch1: CLK, Ch2: nHIB

    Thanks

  • Hard to see anything with this pictures.

    Can you at least point to the point that is different from what I expect, i.e. to the last transaction spi_Read 12 2B 57 00 08 2D 57 00 08 2F 57 00 08?

  • it seems it is required to get better resolution scope to capture the last 12 bytes.

    We will take SPI signal data once we get Logic Analyzer, and it will take some time to get it.

    As soon as we get it, I will update you

  • thanks, please let me know once you have it.

  • Hi Shlomi,

    Here is the SPI data from logic analyser.

    It seems the data from module is 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x10, 0x31, 0x00, 0x00, 0x00, 0x00.

    Are these data correct?

    I don't know why last read data is wrong while 1st ~ 4th data from the module is correct?

    do you have any clue on this?

      

    Thanks

  • Hi Shlomi,

    with the change to the static memory mgmt, we finally completed sl_Start.

    and then when execute sl_DeviceGet, we got  Get Verison Fail -2005 as below.

    So, please advise me what else we need to check for moving forward?

    Here is the log from SPI

    spi_Open

    spi_Open done

     

    sl_Start

    spi_Write 4 65 87 78 56

    spi_Read 8 00 00 00 00 00 00 00 00

    spi_Read 4 BC DC CD AB

    spi_Read 4 08 00 14 00

    spi_Read 8 24 00 04 06 00 00 00 00

    spi_Read 12 11 11 11 11 00 00 10 31 00 00 00 00

     

    sl_DeviceGet

    spi_Write 4 21 43 34 12

    spi_Write 4 66 84 08 00

    spi_Write 8 00 00 01 00 0C 00 00 08

    Get Version Fail -2005

    Thanks