工具与软件:
我正在尝试将 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