最近再做PLC的相關研究
自己本身有買一組TMDSPLCKIT-V3,目前跑TI_prime_phy_example 這個sample project有點問題
這project目的為透過電力線去做封包傳輸,但經由測試發現所接收到的封包與送出的封包內容不相同
所傳輸的封包在這project內是放在PHY_tx_ppdu_t這個行別的structure內,而接收到的封包則是存放在PHY_rxPpdu_t類別的structure
我的問題點在於
由於兩種封包的格式不同,在這main程式裡
PHY_tx_ppdu_t PHY_tx_ppdu_s;
PHY_tx_ppdu_s.length = PHY_TX_TEST_DEFAULT_PPDU_LEN;
PHY_tx_ppdu_s.level = PHY_TX_TEST_DEFAULT_LEVEL;
PHY_tx_ppdu_s.mcs = PHY_TX_TEST_DEFAULT_MOD;
PHY_tx_ppdu_s.txTime = PHY_TX_TEST_DEFAULT_TIME;
PHY_tx_ppdu_s.length = PHY_TX_TEST_DEFAULT_PPDU_LEN;
PHY_tx_ppdu_s.level = PHY_TX_TEST_DEFAULT_LEVEL;
PHY_tx_ppdu_s.mcs = PHY_TX_TEST_DEFAULT_MOD;
PHY_tx_ppdu_s.txTime = PHY_TX_TEST_DEFAULT_TIME;
PHY_tx_ppdu_s.ppduHdr_p = (Uint16 *)&hdrBuf[0];
PHY_tx_ppdu_s.ppduPld_p = (Uint16 *)&ppduBuf[0];
/* Fill the ppduBuf with ramp data*/
buf_p = (Uint16 *)ppduBuf;
for (idx = 0; idx < (PHY_TX_TEST_BUF_SIZE); idx++)
{
valueofbuf[idx] = ((((idx & 127) << 1) + 1) << 8) | ((idx & 127) << 1);
*buf_p++ = ((((idx & 127) << 1) + 1) << 8) | ((idx & 127) << 1);
}
buf_p = (Uint16 *)hdrBuf;
for (i = 0; i < PHY_TX_TEST_HDR_SIZE; i++)
{
*buf_p++ = ((((i & 127) << 1) + 1) << 8) | ((i & 127) << 1);
//*buf_p++ = 1;
}
傳輸封包內容是如此宣告
其中PHY_TX_TEST_DEFAULT_PPDU_LEN = 40
但是所接收到的封包長度卻為47
void cb_ppdu(PHY_ev_t ev, PHY_cbData_t *data_p)
{
if (data_p->status == PHY_STAT_SUCCESS)
{
PHY_rxPpdu_t * receive_address;
receive_address = (PHY_rxPpdu_t *)(data_p->cbParms.rxPpdu.ppduInfoAddr) ;
/* ok to read data */
rxppdu_cnt++;
receiver_buffer_length = ((PHY_rxPpdu_t *)(data_p->cbParms.rxPpdu.ppduInfoAddr))->length ;
for(j = 0 ; j < receiver_buffer_length ; j++)
data_in_rxppdu[j] = *(((PHY_rxPpdu_t *)(data_p->cbParms.rxPpdu.ppduInfoAddr))->data_p+j);
/* release */
PHY_rxPpduRelease((PHY_rxPpdu_t *)(data_p->cbParms.rxPpdu.ppduInfoAddr));
/* flash led every 8 pkt for testing */
if ((rxppdu_cnt & 0x7) == 0)
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1; rxppdu_done = 1;
}
}
receive_address即為所收到封包之存放位置
但這個structure內容僅有部分與PHY_tx_ppdu_s的內容相同,只有header的部分
請問這兩者的關係是(PHY_rxPpdu_t、PHY_tx_ppdu_s)?PHY_rx_ppdu_s的格式是如何?或是我取值的方式有誤?
看過Prime 1.4版本standard似乎是不太相同
附件為完整sample code檔案
感謝!