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.

CC1310 spi从机通信问题

Other Parts Discussed in Thread: CC1310

目前在调试cc1310作为spi从机的功能   主机用的stm32   目前从机可以接收到主机的数据(随机字符串)  但是主机接收不到从机的数据

spi用的SPI_POL0_PHA1模式 ,stm32做主机时,在通信过程中片选信号我一直拉低,芯片手册也是这么要求的,stm32时钟设置为空闲时钟低电平,第二个时钟沿进行数据采样,也就是下降沿,这应该是也符合cc1310SPI_POL0_PHA1模式下的要求。主机spi传输速度我也是设置的最低。

目前找不到主机接收不到cc1310数据的原因?  有过类似经历或者大神给点意见吗?

debuge时也发现了一个问题,上图中鼠标标注的代码(蓝色的那行) object->currentTransaction->count等于8  ,object->amtDataXferred=0,MAX_DMA_TRANSFER_AMOUNT=1024;所以正常应该执行else中程序,但是debuge时走的if里的程序,这是什么原因啊?

而且下面434行的移位操作也不正常  8<<0   8左移0位得到了-1   ????

在SPICC26XXDMA.c这个文件中的代码,有时候也不按照顺序执行,总有正在执行下面代码的时候,下一步就跳到上面代码的情况???

TI大哥救救孩子吧!要被逼疯了,对了我用的CCS调试

  • 你有逻辑分析仪吗?

    SPI_POL0_PHA1模式的时候,默认片选管脚SSln_FSS一直保持低电平就可以了。

        SPI_Params_init(&spiParams);
        spiParams.frameFormat = SPI_POL0_PHA1;
        spiParams.mode = SPI_SLAVE;
        spiParams.transferCallbackFxn = transferCompleteFxn;
        spiParams.transferMode = SPI_MODE_CALLBACK;
        slaveSpi = SPI_open(Board_SPI_SLAVE, &spiParams);
        if (slaveSpi == NULL) {
            Display_printf(display, 0, 0, "Error initializing slave SPI\n");
            while (1);
        }
        else {
            Display_printf(display, 0, 0, "Slave SPI initialized\n");
        }
    
        /* Copy message to transmit buffer */
        strncpy((char *) slaveTxBuffer, SLAVE_MSG, SPI_MSG_LENGTH);
    
        for (i = 0; i < MAX_LOOP; i++) {
    
            /* Initialize slave SPI transaction structure */
            slaveTxBuffer[sizeof(SLAVE_MSG) - 1] = (i % 10) + '0';
            memset((void *) slaveRxBuffer, 0, SPI_MSG_LENGTH);
            transaction.count = SPI_MSG_LENGTH;
            transaction.txBuf = (void *) slaveTxBuffer;
            transaction.rxBuf = (void *) slaveRxBuffer;
    
    
    
            transferOK = SPI_transfer(slaveSpi, &transaction);
            if (transferOK) {
    
            }
            else {
                Display_printf(display, 0, 0, "Unsuccessful slave SPI transfer");
            }
            /* Sleep for a bit before starting the next SPI transfer  */
                  sleep(3);
        }
    
        SPI_close(slaveSpi);

    上面的程序至少我测下来没有问题.

    同时也找其他同事帮你看一下,你可以先去测试,等我一下我同事的回复。

  • 感谢你的回复,我身边并没有逻辑分析仪 ,上述我提到的主机时钟,我设置也没有什么问题吧?我能想到的我都尝试过了,但是主机stm32还是不能接收到数据,很困惑问题出在了哪里?
  • 你这个问题我之前已经回复过的,你示波器有的吧,当你CC1310的SPI传输出去,至于你STM32怎么接收的就不清楚了。
    你手里有2个CC1310吗,你可以两个CC1310 一个master 一个slave 对测。
  • 好的 我尝试一下两个1310测试一下 那我上面的贴出的程序中代码并不是顺序执行是什么原因呢?
  • 你好 我尝试了两个cc1310是可以正常通信的 但是我发现一个问题 就是1310sdk里的slave 例程用的Board_SPI_SLAVE 是三线spi对吗 好像没有用到片选信号呀 ? 而且我用stm32和cc1310通信 不使用片选信号的话,1310也是可以收到数据的,就是发出的数据,主机接收不到
  • 这要看你的STM32是否需要一个片选信号,如果需要你需要手动控制一个IO。

    CC1310_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
    CC1310_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
    CC1310_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
    CC1310_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is active low */
    CC1310_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* External flash chip select */
    CC1310_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN, /* UART RX via debugger back channel */
    CC1310_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL, /* UART TX via debugger back channel */
    CC1310_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
    CC1310_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master in - slave out */
    CC1310_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN,


    请看上面的pin map
    如果你想增加片选就需要仿照
    CC1310_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN, /* External flash chip
    去注册一下
  • 感谢回复! 那这个需要在哪个文件中配置呢 直接在CC1310_LAUNCHXL.h文件中通过/* SPI */
    #define CC1310_LAUNCHXL_SPI_FLASH_CS IOID_20 这样定义可以吗
  • IOID_20已经被使用了,却决于你自己想要用什么IO,IO也要进行初始化。
    你去定义一个CC1310_LAUNCHXL_SPI0_CSN 定义一个没有使用IO.