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.

[参考译文] CC2650STK:SPI 通信不起作用

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1215184/cc2650stk-spi-communication-does-not-work

器件型号:CC2650STK
主题中讨论的其他器件:CC2650

我有一个采用 RHB 封装的 CC2650、我想使用 SPI 模块将  AD4683 (ADC)进行通信(读写)。

问题是 事务每次都无法正常工作。

这是我用于"SPI_Controller"的代码。

-------------------------------------------------------
#ifndef ADC_CONFIG_PARAMS_DATA_SIZE
#define ADC_CONFIG_PARAMS_DATA_SIZE 16.
#endif

#ifndef adc_data_size_32.
#define ADC_DATA_SIZE_32 32.
#endif

静态 SPI_Transaction spiTransaction;

静态 SPI_Params adcParams1;

静态 SPI_Params adcConfigParams;

静态空 setup_adc (){

spiHandle = SPI_open (Board_SPI0、&adcConfigParams);
//设置 configuration2寄存器
uint32_t txData = 0xA1FF;
spiTransaction.txBuf =&txData;
spiTransaction.count = 1;
SPI_TRANSMIT (spiHandle、&spiTransaction);
Task_sleep (10000);
//设置 configuration2寄存器
txData = 0xA13C;
spiTransaction.txBuf =&txData;
spiTransaction.count = 1;
SPI_TRANSMIT (spiHandle、&spiTransaction);
Task_sleep (10000);
//设置 configuration1寄存器
txData = 0x92C2;
spiTransaction.txBuf =&txData;
spiTransaction.count = 1;
RES = SPI_TRANSMIT (spiHandle、&spiTransaction);
SPI_Close (spiHandle);
}

uint32_t SPI_CONTROLLER_readADC (){
uint32_t txData = 0x70007000;
uint32_t rxData;
SPI_Transaction spit;
spit.txBuf =&txData;
spit.rxBuf =&rxData;
spit.count = 1;
spiHandle = SPI_open (Board_SPI0、&adcParams1);
SPI_TRANSMIT (spiHandle、&spit);
SPI_Close (spiHandle);
返回 rxData;
}


静态空 SPI_Controller_init (void)

SPI_INIT();

...

SPI_PARAMS_init (&adcParams1);
adcParams1.dataSize = ADC_DATA_Size_32;
adcParams1.frameFormat = SPI_POL1_PHA0;
adcParams1.bitrate = 500000;

SPI_PARAMS_init (&adcConfigParams);
adcConfigParams.frameFormat = SPI_POL1_PHA0;
adcConfigParams.dataSize = ADC_CONFIG_PARAMS_DATA_SIZE;
adcConfigParams.bitrate = 500000;

spiTransaction.rxBuf = NULL;
}

静态 void SPI_taskFxn (UArg a0、UArg A1)

SPI_Controller_init ();

...
Setup_ADC ();
while (1){
Task_sleep (100000);
// setup_adc ();
SPI_CONTROLLER_readADC1 ();
}

}

-------------------------------------------------------

当我使用 setup_adc 函数进行事务时、一切都正常、我使用外部示波器验证了结果。

当我想从 ADC 读取数据时、我必须发送32位数据(0x70007000)、但当我使用示波器进行检查时、发送的数据始终相同或错误。  它发送的是17位而不是32位、并且始终具有相同的内容、时钟相位和极性不受 SPI_Params 的影响、我不知道它为什么不起作用。   

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

    尊敬的 Luca:

    我注意到的第一个问题是 SPI 传输计数设置为1。  计数应包含事务的帧总数。  请查看 SPI.h 文件参考 、并 参考  TI-RTOS 中适用于 CC2650ble_examples-2.2 GitHub或 BLE-STACK-2-X 的示例  您还可以在线读取常规 SPI 读取操作。

    此致、
    Ryan

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

    您好、Ryan、

    我将计数设置为1是因为我需要传输32位的单个数据帧、不幸的是、我认为这是不可能的、因为片选在计数大于1时返回1。 我可能会使用自定义芯片选择、并希望它能起作用