霍倩楠,焦繼業,任朝輝,焦寬祥
(1.西安郵電大學計算機學院,陜西西安 710121;2.西安郵電大學電子工程學院,陜西 西安 710121)
2018 年,無線電源聯盟成立,發布了第一個無線充電的國際標準Qi協議,無論是什么產品,只要有Qi的標識,都可以用Qi 無線充電器充電[1]。隨著Qi 無線充電接收端產品的日益增加,對無線充電發射端提出了更高的要求,需要其同時具有較高的靈活性和可靠性[2]。但現有的無線充電方案大都通過軟件方式實現數據通信,需要不斷調用CPU 資源,影響通信的速度和準確性。文獻[1]提出將整個數據通信接口集成,包括每個階段的數據包時長和傳輸內容,雖然大大提升了通信速度,但靈活性較差。為了同時提高數據通信的速度和適應性,提出僅對數據進行簡單的收發,留有接口使用戶在不同功率傳輸階段自定義數據包傳輸的間隔時間和傳輸內容的方法。
該文立足于Qi v1.2.4 規范,面向無線充電發射端設計一種可編程Qi 協議控制器,完成數據包的正確接收與發送,并利用FPGA 和Qi 協議測試儀進行驗證。實驗結果表明,此設計可以實現對數據包的實時監控,且靈活性更高,可以應用于更復雜的無線充電發射端方案。
接收端到發射端的通信方式是ASK 方式,采用負載調制技術發送數據,協議規定時鐘信號頻率是2 kHz,即每一位的傳輸時間約為500 μs[3]。如圖1 所示,數據0 是500 μs 的高電平或者500 μs 的低電平;數據1 是250 μs 高電平+250 μs 低電平或者250 μs低電平+250 μs 高電平[4]。

圖1 位編碼格式
數據字節使用11 位異步串行格式。每一個數據由1 bit 起始位、8 bit 數據位、1 bit 奇偶校驗位和1 bit停止位組成。如圖2 所示,起始位為0,數據位采用LSB 編碼格式,低位在前,高位在后[5]。奇偶校驗位采用奇校驗方式,即如果包含偶數個1,校驗位為1,否則為0。如圖2 表示的數據是0x35。

圖2 字節編碼格式
每一組數據包分為序言、報頭、數據、校驗和4 個部分[6]。其中序言由至少4 個1 構成;報頭由一個表示包類型的字節組成;數據包含接收端的配置信息;校驗和是報頭與數據的校驗結果,目的是讓發射機檢測是否發射錯誤。
發射端到接收端的通信方式是FSK 方式,以數字信號控制載波頻率變化的調制方式調制信號[7]。協議規定,每個數據位的傳輸時間約為功率信號頻率的512 個周期。其中數據1 是在512 個周期內,信號頻率發生兩次轉變,第一次轉變發生在數據位的起始階段,第二次轉變發生在256 個周期以后。數據0 從數據位開始,信號頻率僅發生一次轉變[8]。
發射端的字節編碼格式與接收端大致相同,起始位為0,數據位采用LSB 編碼格式,但奇偶校驗位采用偶校驗方式,如果數據字節包含奇數個1,校驗位為1,否則為0[9]。發射端按照連續序列發送所有比特,兩個連續比特之間不暫停,首先發送起始位,最后發送停止位。
與接收端不同的是,發射端的每一組數據包僅包含3 個部分,分別是報頭、數據、校驗和,三者代表的含義與接收端相同[10]。
除數據包外,發射端還發送響應包,響應包有3種類型,分別為響應(ACK)、不響應(NAK)、未知(ND)。它們的字節編碼方式與數據包不同,不包括起始位、奇偶校驗位和停止位,每個數據采用重復的編碼方式,其中ACK 包由8 個1 組成,NAK 包由8 個0 組成,ND 包由1、0 循環構成。
該設計使用Verilog 硬件描述語言建立模型,采用自頂向下的方法,首先根據功能設計出整體方案,再具體設計主要模塊[11]。該設計實現的是面向無線充電發射端的Qi 協議控制器,協議參照最新的1.2.4版本,因此適用于所有支持Qi協議的接收端。
如圖3 所示,Qi 控制器主要包括3 個部分,即Qi接收器、Qi 發送器、波特率時鐘單元。其功能主要包括兩點,一是根據協議格式接收來自無線充電接收端的數據包,送給上層處理;二是將上層發送的數據按照Qi 協議格式編碼送至無線充電接收端[12]。其中,Qi 接收器的任務是接收無線充電接收端發來的數據包,對其進行解碼處理,并根據協議的編碼格式進行前導碼和數據包的檢測,將校驗正確的有效數據包傳給上層進行處理[13]。Qi 發送器的任務是接收來自上層的有效數據包,按照協議的消息格式給每個數據添加起始位、校驗位和停止位,再將完整的數據包發送至無線充電接收端[14]。波特率時鐘單元的任務是根據協議規定的接收和發送數據頻率,設定不同的波特率值進行數據的傳輸。

圖3 Qi控制器架構
如圖4 所示,呈現的是Qi 接收器的整體設計思路,可大致分為解碼模塊、移位控制模塊、數據緩存模塊、CRC 校驗模塊、Qi_RXSTATE 模塊和標志位生成模塊。解碼模塊負責根據Qi 協議位編碼格式將無線充電RX 端發來的串行數據以0、1 的格式解析;移位控制模塊根據接收狀態標志將解碼后的有效數據依次右移緩存至數據緩存寄存器;Qi_RXSTATE模塊和標志位生成模塊與外部信號交互,控制整個接收數據的過程。Qi_RXSTATE 模塊根據解碼出的0、1 數據以及Qi 協議字節編碼格式保留正確的數據;標志位生成模塊會生成如前導接收完成標志、數據接收位標志、數據校驗錯誤標志等標志控制Qi_RXSTATE 模塊。當接收到一包完整的有效數據時,標志位生成模塊也會生成數據接收結束標志。若數據接收結束標志有效,對數據暫時緩存,將收到的所有數據進行CRC校驗,若校驗正確,則將數據輸出。

圖4 Qi接收器框圖
從無線充電RX 端發送的串行數據都需先經過解碼,每一位數據解析正確是最終數據正確解析的前提[15]。所以為了保證最終輸出數據的完整性及準確性,解碼模塊需精確地解析每一位數據。Qi 協議中規定,時鐘信號的頻率是2 kHz,每一位的傳輸時間約500 μs[16],但是在實際應用中,由于硬件解調電路解析數據的不確定性,它的每一位傳輸時間會有偏差,數據1也不是在250 μs發生電平的跳變。通常的解碼方法是用時間采樣,但是在時間偏差較大的情況下,采樣點很難確定,且較容易丟失數據。為了保證數據解碼的準確性,該設計采用邊沿檢測的方法檢測相鄰沿改變的時間,若在400~600 μs 之間沒有電平的改變,為0;反之則為1。圖5 為解碼的檢測原理圖。

圖5 解碼檢測原理圖
Qi_RXSTATE 模塊是Qi 控制器接收模塊的核心,接收狀態機的狀態圖如圖6 所示,主要分為IDLE、PRE、START、BYTE、ODD 和STOP 6 個狀態。IDLE 表示初始狀態,PRE 表示接收前導碼狀態,START、BYTE、ODD 和STOP 分別表示數據的起始、數據、奇校驗和停止狀態。

圖6 接收狀態機的狀態圖
接收機的初始狀態是IDLE 狀態,當檢測到下降沿,即pin_neg=1 時,進入接收前導碼狀態,同時pre_cnt 記錄前導的個數。當收到1,即pin_change 為1 時,pre_cnt 不斷自增,直到接收到0,即pin_change為0;若此時前導個數大于7,則進入數據的起始位狀態,并將數據位數bit_cnt 置為1。若繼續接收到有效數據,則進入數據的數據位狀態,每收到一位有效數據,bit_cnt 加1,并把數據暫時鎖存。當接收到第10 位有效數據,進入數據的校驗位狀態,對比接收到的數據與鎖存的10 位數據的奇校驗結果,如果相同,且收到1,則進入數據的停止位狀態。此時一個有效數據已接收結束,將數據緩存,為后面的CRC 校驗作準備。對于以上所有的狀態,如果任一條件未滿足,都需要回到IDLE 狀態,重新檢測前導位。無線充電接收端發送的一包數據至少會包含3 個有效數據,所以在停止位狀態下,如果下一位收到的數據是0,則返回接收數據的起始位狀態,繼續接收數據,如果未收到,默認所有數據接收結束,返回IDLE狀態。
如圖7 所示,呈現的是Qi 發射器的整體設計思路。無線充電發射端傳遞給接收端的信息有兩種類型,一類是數據包,另一類是響應包,由于兩者的數據構成不同,因此將其放在不同的模塊。DATA 模塊接收來自協議層的數據包,包括數據頭包和數據包,將其依次傳入CRC 校驗模塊進行CRC 計算,并將計算結果返回至DATA 模塊。每包數據傳入編碼模塊按照Qi 協議格式進行編碼,為數據添加起始位、偶校驗位和停止位。Response 模塊接收來自協議層的響應包。選擇模塊負責從編碼后的數據和響應包中選擇最終輸出的數據,再經移位寄存器將每位數據依次傳入ENCODE_STATE 模塊進行數據編碼并輸出。

圖7 Qi發射器框圖
ENCODE_STATE 模塊是Qi 控制器發射模塊的核心,發射編碼狀態機的狀態圖如圖8 所示,主要分為IDLE、ENCO_00、ENCO_01、ENCO_10、ENCO_11 5 個狀態。IDLE 表示初始狀態,ENCO_00、ENCO_11表示數據0 的編碼狀態,ENCO_01、ENCO_10 表示數據1 的編碼狀態。當檢測到有數據傳入,即txen=1時,進入ENCO_00 狀態,當時間滿足Qi 協議數據傳輸要求時,clk_t=1,假設前一個狀態是ENCO_00,若收到0,則跳轉到ENCO_11;若收到1,則跳轉到ENCO_10,以此類推。

圖8 編碼狀態機
為了使編碼后的信號能被無線充電RX 端正確解析,編碼必須滿足Qi 協議數據傳輸的要求。當處于ENCO_00 狀態時,輸出0;當處于ENCO_11 狀態時,輸出1;當處于ENCO_01 狀態時,先輸出0 并持續半個數據傳輸周期,再輸出1;當處于ENCO_10 狀態時,先輸出1 并持續半個數據傳輸周期,再輸出0。
Qi 協議控制器選用DIGILENT ARTY ARTIX-7 XC7A35T FPGA 開發板以及Qi 無線充電器測試儀作為驗證平臺。為了驗證控制器的實用性,將無線充電樣機解調后的數字信號傳入Qi 控制器,然后再通過串口調試助手將控制器解析的數據打印并與Qi 無線充電器測試儀發送的數據作對比。通過對比,兩者數據完全相同,且無線充電測試儀不斷更新數據包,證明它正確收到了無線充電發射端發送的數據[17-19]。
將該文與使用Cortex M0 解析數據的時間與準確性進行對比。對比參數如表1 所示。

表1 性能測試對比
為了突出文中設計的實用性,編寫C 代碼用軟件模擬實現對數據的解析,并在Cortex M0 上測試。結果表明,在50 MHz 時鐘下,該設計的執行時間遠遠小于純軟件的方式,且準確性有所提升,可提升無線充電發射端解析數據的效率。
該文面向Qi 兼容的無線充電發射端,設計并實現了協議控制器。通過研究無線充電發射端與接收端的數據通信格式,完成了控制器接收模塊、發射模塊等設計,實現了數據的實時監控。針對解調后的波形和協議格式有偏差的問題,接收模塊中數據的解碼采用邊沿檢測的方法,提升了數據解碼的準確性,減少了丟包率。同時在設計中增加了串行接口,可以自定義每個數據包傳輸的間隔時間和數據包中傳輸的內容,使該控制器具有較強的靈活性和適應性。后續將繼續研究,為掛載在開源處理器RISC-V上作準備,并搭建外圍解調電路和驅動電路等,實現完整的無線充電發射端方案。