工具与软件:
我正在尝试将 ESP32设为主器件、将 CC1310设为从器件。 我已尝试相反的操作(ESP 作为从设备)、通信正常工作、但是当我反向操作(CC1310从设备)时、ESP32发送正确的数据、但是 CC1310不接收字节。 在逻辑分析仪上、通信似乎良好。
模式为 POL 0、PHA 0、频率为1MHz
我是不是做错了什么? 使用的工程是 TI 15.4传感器 OAD 示例。
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.
工具与软件:
我正在尝试将 ESP32设为主器件、将 CC1310设为从器件。 我已尝试相反的操作(ESP 作为从设备)、通信正常工作、但是当我反向操作(CC1310从设备)时、ESP32发送正确的数据、但是 CC1310不接收字节。 在逻辑分析仪上、通信似乎良好。
模式为 POL 0、PHA 0、频率为1MHz
我是不是做错了什么? 使用的工程是 TI 15.4传感器 OAD 示例。
你(们)好
我只有 CC1310可供选择、因此需要将其用于主设备和从设备。
我从 SDK 中简化了 SPI 示例、如下所示:
主器件:
#define SPI_MSG_LENGTH (32) unsigned char masterRxBuffer[SPI_MSG_LENGTH]; unsigned char masterTxBuffer[SPI_MSG_LENGTH]; void *masterThread(void *arg0) { SPI_Handle masterSpi; SPI_Params spiParams; SPI_Transaction transaction; uint8_t i; SPI_Params_init(&spiParams); spiParams.frameFormat = SPI_POL0_PHA0; spiParams.bitRate = 1000000; masterSpi = SPI_open(Board_SPI_MASTER, &spiParams); if (masterSpi == NULL) { while (1); } for (i = 0; i < SPI_MSG_LENGTH; i++) { masterTxBuffer[i] = i; } memset((void *) masterRxBuffer, 0, SPI_MSG_LENGTH); transaction.count = SPI_MSG_LENGTH; transaction.txBuf = (void *) masterTxBuffer; transaction.rxBuf = (void *) masterRxBuffer; while(1) { SPI_transfer(masterSpi, &transaction); sleep(2); } }
从机:
#define SPI_MSG_LENGTH (32) unsigned char slaveRxBuffer[SPI_MSG_LENGTH]; unsigned char slaveTxBuffer[SPI_MSG_LENGTH]; void *slaveThread(void *arg0) { SPI_Handle slaveSpi; SPI_Params spiParams; SPI_Transaction transaction; uint32_t i; SPI_Params_init(&spiParams); spiParams.bitRate = 1000000; spiParams.frameFormat = SPI_POL0_PHA0; spiParams.mode = SPI_SLAVE; spiParams.transferCallbackFxn = NULL;//transferCompleteFxn; spiParams.transferMode = SPI_MODE_BLOCKING; slaveSpi = SPI_open(Board_SPI_SLAVE, &spiParams); if (slaveSpi == NULL) { while (1); } for (i = 0; i < SPI_MSG_LENGTH; i++) { slaveTxBuffer[i] = i + 50; } memset((void *) slaveRxBuffer, 0, SPI_MSG_LENGTH); transaction.count = SPI_MSG_LENGTH; transaction.txBuf = (void *) slaveTxBuffer; transaction.rxBuf = (void *) slaveRxBuffer; while(1) { SPI_transfer(slaveSpi, &transaction); } }
此代码按预期工作、我收到、在 masterRxBuffer 中、50、51、 52、53、 每次我从主设备传输0、1、2、3、...时
现在我还没有工具、因此可以在主器件和从器件连接在一起时监控 SPI 流量、因此我知道从器件代码是正常的、只需观察我在主器件侧接收数据即可。
在从器件未连接时监控主器件上的 SPI 如下所示:
您可以看到、使用我们的驱动器、在传输每个字节之间、CSn 被拉高。
如何完成此操作取决于选择的帧格式。
如果我在主器件上将我的格式从 SPI_POL0_PHA0更改为 SPI_POL0_PHA1、它看起来像这样:
我假设使用 CC1310作为从器件并将帧格式设置为 SPI_POL0_PHA0、时希望 CSn 在每个字节之间准备好被拉高。
您应尝试修改 ESP32主代码、使 SPI 通信在我的第一张图中看起来像。
BR
Siri