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.
工具与软件:
您好!
我尝试使用相当繁琐的协议来模拟(MIB) SPI 从站。
目前、我能够模拟 SPI 层上的协议、但无法模拟传输层上的协议、方法是使用16B (请求4B -响应12B)上的传输组、以以下方式发送:
MOSI: --- | x1 | x2 | x3 | x4 | -------- 15us ------- | NA | NA | NA | NA | NA | NA | NA | NA | NA |NA | NA | NA | ----- | a1 | a2 | a3 | a4 | -------- 15us ------- | NA | NA | NA | NA | NA | NA | NA | NA | NA |NA | NA | NA | --- MISO: --- | NA1 | NA2 | NA3 | NA4 | ------- 15us ------- | y1 | y2 | y3 | y4 | y1 | y2 | y3 | y4 | y1 |y2 | y3 | y4 | ----- | NA1 | NA2 | NA3 | NA4 | ------- 15us ------- | x1 | x2 | x3 | x4 | x1 | x2 | x3 | x4 | x1 | x2 | x3 | x4 | --- | TGx | ----- | TGx | |
注意:响应(为简化请求提供4倍副本)会因传输组 TGX 的一次传输而延迟。
但问题是,我需要 立即响应,即~15us 后收到请求(即类似的东西):
MOSI: --- | x1 | x2 | x3 | x4 | -------- 15us ------- | NA | NA | NA | NA | NA | NA | NA | NA | NA |NA | NA | NA | ----- | a1 | a2 | a3 | a4 | -------- 15us ------- | NA | NA | NA | NA | NA | NA | NA | NA | NA |NA | NA | NA | --- MISO: --- | NA1 | NA2 | NA3 | NA4 | ------- 15us ------- | x1 | x2 | x3 | x4 | x1 | x2 | x3 | x4 | x1 |x2 | x3 | x4 | ----- | NA1 | NA2 | NA3 | NA4 | ------- 15us ------- | a1 | a2 | a3 | a4 | a1 | a2 | a3 | a4 | a1 | a2 | a3 | a4 | --- | TGx | ------- 15us ------- | TGy | ----- | TGx | ------- 15us ------- | TGy |
我尝试在通知功能"mibspiGroupNotification "中控制传输组和 TGy 中的数据。
基本上通过执行以下操作(伪代码):
void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group) { if (mibspi == mibspiREG1) { if (group == TGx) { /* Get TGx request data */ mibspiGetData(mibspiREG1, TGx, &g_TGx_rx_data[0]); /* Copy request data to TGy response/tx data buffer g_TGy_tx_data[0] */ ... // memcpy(...); /* Set TGy data */ mibspiSetData(mibspiREG1, TGy, &g_TGy_tx_data[0]); /* Clear enable of TGx */ mibspiREG1->TGCTRL[TGx] &= ~0x80000000U; /* Enable TGy */ mibspiREG1->TGCTRL[TGy] |= 0x80000000U; // mibspiTransfer(mibspiREG1, TGy); } else { /* Clear TGy */ mibspiREG1->TGCTRL[TGy] &= ~0x80000000U; /* Re-enable TGx */ mibspiREG1->TGCTRL[TGx] |= 0x80000000U; // mibspiTransfer(mibspiREG1, TGx); } } }
这种方法似乎几乎起作用、问题是我似乎在发送预期数据之前发送1B 的旧/损坏数据、并且这样做会干扰 TGy 缓冲区/响应(以及 TGX)的数据内容/顺序。
因此、我想知道我的预期用例是否可行?
有什么建议吗? 这似乎是应该有可能完成的事情吗?
免责声明:我目前没有可以共享的工作区/项目、因此仅共享描述当前问题所需的必要详细信息。