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.

[参考译文] RTOS/CC2650EM-5D-RD:SPI_TRANSFERT()不发送 MOSI 数据输出

Guru**** 2582405 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/592076/rtos-cc2650em-5xd-rd-spi_transfer-does-not-send-mosi-data-output

器件型号:CC2650EM-5D-RD

工具/软件:TI-RTOS

大家好、我正在尝试使用 simple_peripheral 项目在 CC2650DK-5XD 芯片中实现 SPI 通信。

我已经用一个外部线程创建了一个外部文件、这个外部线程我被称为 SPIads1263.c、此文件在 main.c 上被调用并以与简单外设任务相同的优先级执行。

问题是、一周前、它已经开始工作、但在我执行这个新的执行之后、我的 MOSI 引脚没有显示任何内容  

示波器中。

我已经调试了 SPI_TRANSF()和 SPI_OPEN ()函数,所有函数都返回预期的返回值。

当我尝试使用 PIN_setOutput 时、电路板中的引脚也在工作、因此这不是电路板问题。

请不要知道要尝试其他什么。

下面是代码:

/*********
* SPIads1263

*/



*********
*包括
*/
#include 
#include 

#include "SPIads1263.h"
#include "board.h"
#include "util.h"

#include 

#include 
#include 
#include 
#include 

#include 
#include 
#include 

#include 

/*********
*常量
*/
#define SPIads1263_task_priority 2
#define SPIads1263_task_stack_size 512

/*********
*全局变量
*/
static PIN_Handle BoardGpioInitHandle;

static PIN_State BoardGpioInitState;

static SPI_Handle handle;
static SPI_Params params;
static SPI_Transaction transaction;
静态 uint8_t txBuf[]="Hello World";//传输缓冲
器静态 uint8_t rxBuf[11]; //接收缓冲

器静态 bool ret = false;


/*********
*局部变量
*/

//任务配置
Task_StructS SPIads1263Task;
Char SPIads1263TaskStack[SPIads1263_task_stack_size];

/*********
*本地函数
*/
static void SPIads1263_init (void);
static void SPIads1263_taskFxn (UArg a0、UArg A1);

/*********
*公共职能
*/

*@fn SPIads1263_createTask
*
*@简单 BLE 外设的简短任务创建函数。
*
*@param 无。
*
*@返回无。
//
void SPIads1263_createTask (void)
{
Task_Params taskParams;

//配置任务
Task_Params_init (_taskParams.stack
);



任务 Params.stack = SPIads1263TaskStack;任务 Params.STACKSIZE = SPIads1263_task_stack_size;任务 Params.stack = SPIadparams.task_priority (任务1263_task_params.task_params.task_params.task_params.task_params. SPIads1263_taskFxn、&taskParams、NULL);
}
/*********
*@fn SPIads1263_init
*
*@在初始化期间调用的简短说明、其中包含应用
程序* 特定初始化(即硬件初始化/设置、
* 表初始化、加电通知等)和
* 配置文件初始化/设置。
*
*@param 无。
*
*@返回无。
*/
static void SPIads1263_init (void)
{
BoardGpioInitHandle = PIN_OPEN (&BoardGpioInitState、BoardGpioInitTable);
if (!BoardGpioInitHandle){
System_abort ("初始化板 LED 引脚时出错");
}


//初始化 SPI 并指定非默认参数
SPI_PARAMS_INIT (params);
params.bitrate = 1000000;
params.frameFormat = SPI_POL1_PHA1;
params.mode = SPI_MASTER;

//配置事务
transaction.count = sizeof (txBuf);
transaction.txBuf = txBuf;
transaction.rxBuf = rxBuf;
//Init SPI after Block parameters and before opening
spi_init();
//打开 SPI
句柄= SPI_open (0、params);

如果(!handle){
System_printf ("SPI 未打开");
}
}

静态空 SPIads1263_taskFxn (UARg a0、UARg A1)
{
uint32_t currVal = 0;
//初始化应用程序
SPIads1263_init ();

//
应用程序主循环(;)
{
currVal = PIN_getOutputValue (Board_DK_LED3);
PIN_setOutputValue (BoardGpioInitHandle、Board_DK_LED3、!currVal);

currVal = PIN_getOutputValue (IOID_11);
PIN_setOutputValue (BoardGpioInitHandle、IOID_11、!currVal);
//执行信息的 SPI 传输
// SPI_TRANSFCTION (句柄、事务);

RET = SPI_transfer (handle、&transaction);
如果(!ret){
System_printf ("未成功的 SPI 传输");
}

Task_sleep (100000);
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Nicholas Paolillo、您好!

    您是否确定要在 Board.c 和 Board.h 中设置 SPI 引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我确保其配置与之前工作时的配置相同。

    这是 CC2650DK_5XD 文件

    /* SPI 配置结构、描述要使用的引脚*/
    const SPICC26XXDMA_HWAttrsV1 spiCC26XXDMAHWAttrs[CC2650DK_5n_SPICOUNT]={
    {
    baseAddr = SSI0_BASE、
    .intNum = INT_SSI0_comb、
    .intPriority =~0、
    .wiPriority = 0、
    powerMngrId = PowerCC26XX_Periph_SSI0、
    defaultTxBufValue = 0、
    .rxChannelBitMask = 1<<UDMA_CHAN_SSI0_RX,
    txChannelBitMask = 1<<UDMA_CHAN_SSI0_TX,
    MOSIPin = Board_SPI0_MOSI、
    MISO 引脚 = Board_SPI0_MISO、
    clkPin = Board_SPI0_CLK、
    .csn 引脚 = Board_SPI0_CSn
    }
    }; 

    这是 CC2650DK_5XD.h 文件:

    /**========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *定义
    *=================================================================================================== 使用
    
    通用电路板别名*///*将引脚映射到电路板信号
    * 
    */
    /* LED */
    #define Board_LED_ON 1 CC2650上的*/* LED 为高电平有效*/
    #define Board_LED_OFF 0
    #define Board_DK_LED1 PIN_Unassigned
    #define Board_DK_LED2 PIN_Unassigned
    #define Board_DK_LED3 ioID_2 /* P1.2 */
    #define Board_DK_LED4 ioID_3. /* P1.4 */
    /*按钮板*/
    #define Board_key_select 未分配的 PIN_REGLED /* P1.14 */
    #define Board_key_up ioID_6. /* P1.10 */
    #define Board_key_down ioID_4. /* P1.12 */
    #define Board_key_left ioID_5 /* P1.6 */
    #define Board_key_right ioID_13. /* P1.8 */
    * LCD 板*/
    #define Board_LCD_MODE ioID_7 /* P1.11 */
    #define Board_LCD_RST PIN_Unassigned
    #define Board_LCD_CSn ioID_8. /* P1.17 */
    /* UART 板*/
    #define Board_UART_RX ioID_1. /* P1.7 */
    #define Board_UART_TX ioID_0 /* P1.9 */
    #define Board_UART_CTS PIN_Unassigned
    #define Board_UART_RTS PIN_Unassigned
    /* SPI 电路板*/
    #define Board_SPI0_MISO ioID_12. /* P1.20 */
    #define Board_SPI0_MOSI ioID_11. /* P1.18 */
    #define Board_SPI0_CLK ioID_10 /* P1.16 */
    #define Board_SPI0_CSn PIN_Unassigned
    /*电源板*/
    #define Board_3V3_EN ioID_14 /* P1.15 */
    
    /**============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
    *实例标识符
    *=========================================================================================== //
    //*通用 SPI 实例标识符*/
    #define Board_SPI0 CC2650DK_5XD、SPI0
    /*通用 UART 实例标识符*/
    #define Board_UART CC2650DK_5n_UART0
    /*通用加密实例标识符*/
    #define Board_crypto CC2650DK_5XD、CRYPTO0 

    看到 CS 引脚未定义、但这不是问题、我在代码中手动设置它、它应该起作用。
    主要问题是 MOSI 引脚不发送信息。
    提前感谢
    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,第34行出错了,右侧是:
    #define Board_SPI0_CSn 未分配的 PIN_REGLED
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经尝试了我能想到的最后一件事。
    我已将 BLE 更新为"Ble_SDK_2_02_01_18"
    并将 TI-RTOS 更新为"tirtos_cc13xx_cc26xx_2_20_01_08"

    我实现的代码与上述方法相同。

    请任何能提供帮助的人、我将不胜感激。
    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Nicholas Paolillo、您好!

    请发送 board.c、board.h、main.c 和 SPIads1263.c 以及 SPIads1263.h。 我将为您检查它们。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Luu Vy
    非常感谢您在经过大量尝试后提供帮助
    我终于发现了问题。
    似乎只有一个引脚无法正常工作。
    在我更改引脚后、它开始工作。
    非常感谢您的帮助、我会将您视为答案。
    此致