文章特點:數據解碼方面實在是沒什么信心,存在分析錯亂的可能性,所幸發出來共同探討,懇請鞭策。
0x01 概述
這是一款工作在315Mhz頻段的無線遙控門鈴,根據查閱官方手冊以及芯片信息,確定其采用了eV1527 百萬組編碼芯片。這是一款無線發碼專用集成電路,采用 CMOS 工藝制造,擁有 20 位內碼,可預燒 100 萬組內碼組合,發射頻率支持315Mhz與433Mhz。本文僅對基於錄制的信號波形圖進行簡單分析,詳細發碼結構可參考相關文檔。
EV1527芯片說明:http://www.sc-tech.cn/ev1527.pdf EV1527碼位波形圖:http://wenku.baidu.com/view/1b54c361ddccda38376baf7c.html
編碼模塊特寫:
0x02 信號分析
首先通過gqrx或SDR#對無線門鈴的工作頻率進行精確定位,我自己這款檢測到的頻率值為315.1Mhz,而公司的門鈴則與說明書標稱的一樣為315Mhz ;
出現不同是因為EV1527芯片可根據電壓和振盪電阻的匹配情況來確定其振盪頻率,電壓越高,頻率越大,電阻越大,頻率越小,從組合來看可以構成無數種振盪頻率,大大降低了重復幾率。
接下來對工作頻段數據進行捕獲錄制,執行以下命令:
hackrf_transfer -r hell.iq -f 315100000 -s 8000000 -n 40000000
解釋:記錄數據到文件hell.iq、指定工作頻率為315.1Mhz,指定采樣率8Msps/s,指定采樣樣本數為40M,采樣時間也就是5秒
並在5秒內按下遙控器按鈕,此時鈴聲響起,數據也被記錄下來了
重放信號以測試樣本可靠性:
hackrf_transfer -t hell.iq -f 315100000 -s 8000000 -a 1 -l 40 -x 47
解釋:指定發射信號源文件,指定工作頻率315.1Mhz,指定采樣率8Msps,開啟天線增益控制,指定RX LNA(IF)增益為40,指定TX VGA(IF)增益為47
如果聽見鈴聲響起,那說明這段信號是有效的,如果沒有響起,可能是錄制指定的頻率不對或采樣到的信號樣本不完整,可多次嘗試錄制,如果是車鑰匙等其他設備,其信號只有一次或幾次有效性,俗稱滾動碼,這點請注意。
如果從單純分析信號的角度考量,現階段不一定需要重放信號;
現在我們使用音頻處理軟件 Audacity 對hell.iq文件進行信號分析,我們可以通過其展現信號波形圖來判斷信號的調制方式並加以分析
打開程序后點選“文件”—“導入”—“原始數據”— 配置如下
導入成功后顯示如下圖:
上面有14段完整的信號采樣,我們選擇一段信號后點擊放大鏡來進一步觀察信號特征
上面是兩段相同的脈沖信號,由1和0組成 ,因為我們已經預先知曉了該無線模塊的調制模式為ASK/OOK 所以接下來的分析比較簡單,這里面的OOK是ASK的一種特殊調制模式,叫做(On-Off-Keying),簡單說它就是摩爾斯電碼的工作方式。由於OOK的抗噪聲性能不如其他調制方式,所以該調制方式在目前的衛星通信、數字微波通信中沒有被采用,但是由於該調制方式的實現簡單,在遙控、RFID等領域中仍然有着廣泛應用。
我們將第一個最窄寬度的藍色條狀物當作標准寬度 1,空白區域當作0,空白區域的寬度能容納幾個標准寬度藍條,就代表有幾個0,以此類推,較寬的藍色條狀物能容納幾個標准寬度藍條就代表有幾個1。
經過計算和統計后,我們得出如下數據:
1000100011101000111011101000100011101110100011101110100011101000111010001110100010001000100011101
在我們按住遙控按鈕的過程中,信號實際上是在持續不斷的重復發射的,后面距離第二段脈沖信號經過計算大約有30個0,所以整段數據為
1000100011101000111011101000100011101110100011101110100011101000111010001110100010001000100011101000000000000000000000000000000
根據EV1527芯片說明,當工作電壓在12V、振盪阻值80K情況下,其脈沖周期 T≈400μs,即0.4毫秒,脈沖周期是指前后相鄰脈沖的間隔時間,這一參數將在后面模擬仿真時使用到。
由上面兩組相同的信號樣本結合芯片說明可知這是兩組相同的幀碼,每一幀碼有25位,由同步碼、內碼、數據碼組成,一幀碼發完馬上發下一幀碼。
時序圖:
數據解碼:
接下來對上面捕獲的數據進行解碼,其他位我們可以這樣理解,第一位SYN也就是1000,這段我們不予分析(實在不會,這是一段高低電平比t:31t的脈沖信號 ),后面的部分可以分為“百萬組內碼”和“數據碼”,數據碼我們已知是后四組,也就是1000100011101000,根據上訴分析可解出4個數字代表一位,每個數字脈沖周期是4t,這里的1代表高電平,0代表低電平,則1000可解為0,因為4t+12t先高后低表示0碼,而1110可解為12t+4t先高后低,代表1碼,最后整段解碼得出0010這個發碼組合,參考芯片說明一共有15種按鍵組合,當門鈴被按下后則發出對應的發碼組合給接收器中的EV1527芯片,接收器收到后就會處理響應,播放鈴音了。
內碼部分按照上述原理解碼后得出:01011001101101010100,將二進制轉換后得出 十進制:367444 十六進制:0x59B54 也就是這款芯片的百萬組編碼號了。
公司門鈴內碼解碼后得出:1101001101101100101 十進制:432997 十六進制:0x69B65
0x03 數據匯總
#自己的門鈴 產品型號:朗瑞特 LR-1688 直流款 發射模塊:eV1527 百萬組編碼芯片 調制模式:ASK/OOK 工作頻率:315.1Mhz Vector:(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
#公司門鈴 產品型號:朗瑞特 LR-1688 交流款 發射模塊:eV1527 百萬組編碼芯片 調制模式:ASK/OOK 工作頻率:315Mhz Vector:(1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
0x04 模擬信號源發射
Repate模塊用於設置脈沖周期;
由於我們的框圖中使用采樣率為1MHz,那么想讓每個數字所占用的時間t=0.4ms的話,則需要使Vector Source里的每個數字重復 1e6*0.5*10^(-3)=400 次。於是將Repeat模塊的Interpolation設置為400即可。
Gnuradio框圖: