Raw transparent output
除錯時,經常採用原始資料輸出模式Raw transparent output。
原始資料輸出引腳PC2/TPRA,用示波器可以直接採集TPRA上的訊號。
從示波器上可以觀察到,雜波訊號上電後就產生,對應中心頻率(433.92MHz)和調製方式(ASK/FSK)後,訊號會產生變化,但不是正常訊號,還需要調整接收波特率才能解析到正確的訊號。
不同波特率的訊號
一般主機定義的鑰匙訊號,發出來的都是相同波特率的訊號。但是也有例外,比如有的主機定義的鑰匙所發出來同一幀訊號,波特率就各不相同,我見過有發波特率是1KHz喚醒幀、0.5KHz同步幀和2KHz資料幀特殊訊號。這樣在設定5781的波特率的時候,只能把對應的波特率設定為2KHz,那麼資料幀對應的就是正常的1個碼元,而喚醒幀則是半個碼元,同步幀是1/4個碼元。於是所解析到的資料需要自重組。
不歸零編碼和曼切斯特編碼
不歸零編碼(NRZ)的傳輸速度是曼切斯特編碼的兩倍。比如,曼切斯特編碼的傳輸速度是9600碼元/秒,那麼如果採用NRZ編碼,傳輸速度就是9600*2 = 19200碼元/秒。
系統的pattern檢測,實際上是按照NRZ碼匹配的,所以設定的時候需要注意對應關係,例如:
wake up 0x55555555
start frame ID 0x55555556
SPI讀寫異常
問題程式碼:
spi_tx_buf[0] = 0x01;
spi_tx_buf[1] = 0x00;
spi_tx_buf[2] = 0x00;
R_CSI00_Send_Receive(spi_tx_buf, 3, spi_rx_buf);
flags_system = spi_rx_buf[0];
flags_events = spi_rx_buf[1];
fill_level = spi_rx_buf[2];
Delay(_T3*30);
ATA5781_SetPIN_CS();
按照這種寫法,SPI將讀不到正確的返回值,因為R_CSI00_Send_Receive(spi_tx_buf, 3, spi_rx_buf);並不是阻塞傳送,實際上執行完了該語句後,硬體上訊號並沒有傳送完全。因此可以將延時提前,解決這個問題,修改程式碼如下:
spi_tx_buf[0] = 0x01;
spi_tx_buf[1] = 0x00;
spi_tx_buf[2] = 0x00;
R_CSI00_Send_Receive(spi_tx_buf, 3, spi_rx_buf);
Delay(_T3*30);
ATA5781_SetPIN_CS();
flags_system = spi_rx_buf[0];
flags_events = spi_rx_buf[1];
fill_level = spi_rx_buf[2];
RX模式下,只能開一個通道
如果同時開啟A和B,接收模組會失效,因此RX模式下只能開一個通道,比如通道A
ATA5781_SET_SYSTEM_MODE(BM_SYS_MODE_CONFIG_VCO_TUNING | OPM_RX, BM_SVC_CH_CONFIG_PATHA);
提高接收模組的適應性
由於汽車鑰匙在生產的過程中,會存在一定的差異性,因此鑰匙本身一般存在頻偏,因此接收端一般會適當地增大接收頻寬(bandwidth)和接收頻偏(FSK),來儘可能提高產品的適應性。