2019年5月1日 星期三

1-Wire SDQ Interface and Protocol


1-Wire SDQ介面,是一個只靠一條信號與GND就可以進行溝通的通訊介面。常
用電池、電源辨識、資料加密等,資料量小、低速傳輸的應用。在下面我就用
TI BQ2022A的dasheet裡,CPU(HOST)I如何來讀取BQ2022A內部的資料來做例
子,從硬體到協議溝通層面來解釋。

1.硬體層面

在硬體方面,BQ2022A做為Slave,接收CPU/MCU的命令,兩邊的SDQ與GND
相接,而因為兩邊都是Open drain的方式在控制SDQ信號,需要在SDQ信號線上
,加入上拉電阻到VPU電源,VPU電源為2.65~5.5V。





















下圖是BQ2022Q功能方塊。裡面包括SDQ通訊控制器與8 bit CRC產生,右邊
則是3種ROM,分別存放ID、資料、狀態。當CPU透過SDQ信號線要來讀取
BQ2022A裡面的ROM,需要透過SDQ通訊命令,並且會加上CRC數據,讓
CPU確認它收到的資料是否有錯。
















2.協議溝通Protocol層面

SDQ通訊命令如下,分成Level I與Level II,Level I為分為Read serialization
ROM (33h)與Skip Serialization ROM(CCh),差別在於要從ID ROM開始讀/寫
或是Skip跳到Memory ROM來讀寫。ID ROM是8 bit family code + 48 bit
identification number + 8 bit CRC。

Level II的命令用來讀寫Memory 與Status ROM的資料,Read Memory/Field
CRC(F0h)與Read Memory/Page CRC的差別在於前者是CPU讀到Memory
1024bit 的結尾,BQ2022A才送出CRC資料,後者是將1024bit分成4個Page
,各別256bit,每讀到一個Page結尾,BQ2022A就送出CRC資料。



















執行Read serialization ROM (33h)後,可以讀到7+1 byte的ID ROM,再進到
LevelII,來操作Memory ROM







執行Skip ROM (CCh)後,就會跳過ID ROM,直接進到LevelII,來操作
Memory ROM
下圖是一個Read Memory/Field CRC的命令序列,第一步是進行Level I的
命令,第二步CPU發送Read Memory Command(F0h),第三、四步是
Address命令,來決定要從1024bit裡的那個位置開始讀取。例如要從
Address 0006h來讀,那就要先傳送Low byte 06h,再傳High byte 00h。
CPU再發送出Command與Address後,下一步就要從BQ2022A去讀到
CRC值,這個CRC值是BQ2022A計算它接收到的Command與Address,
也就是F0h,06h,00h後產生的。CPU自已也會去計算Command(F0h)與
Address(0006h)的CRC值,去跟從BQ2022A讀到的CRC值來比較,如果
一樣,表示BQ2022A有正確接收到CPU所送出的命令,如果不一樣,表
示BQ2022A接收有錯誤,就要重新Reset再送一次命令。


在第5個步驟Read and Verify CRC通過後,CPU就開始去讀Memory的
資料,BQ2022A傳送資料的起始位址,就是從Address命令決定。一
直到CPU讀到1024bit的結尾,BQ2022A會再送出一個CRC,也就是
前面所傳送Memory資料的CRC值,CPU也會計算它從BQ2022A讀到
的Memroy資料的CRC值,兩個值去比對,就可以確保CPU讀到的資
料是正確的,避免在傳送資料的過程中,SDQ訊號受到干擾,導致
CPU判讀某個bit出錯。


3.物理層Physical層面

Reset timing
當CPU要開始對BQ2022A進行控制前,需要在SDQ信號線上,CPU
與BQ2022進行確認的動作,CPU將SDQ拉low至少480us,這就是
Reset timing。而BQ2022A接收到Reset後,也要拉low在60~240us
,這就是Presence Pulse命令。CPU接收到Presence Pluse後,才
會進行後面讀寫ROM的動作。

Write bit
當CPU在對BQ2022A發送命令時,就是寫入的動作,而每一個bit就
如下圖,CPU先拉low,持續tWSTRB的時間,這個時間可以是1~15us。
再來CPU就要去拉high或low直到tWDH的時間到達。tWDH的時間至少
要60us,最大就是一個bit cycle時間,bit cycle就是一個bit的周期,從
CPU拉low到下一次CPU拉low的時間間隔。當CPU在進行Write bit,
BQ2022A就要在CPU拉low後15us~60us去辨別CPU是Write"1" 或Write
"0"。在tWDT後,會有一段High的時間trec,至少要1us。這樣BQ2022A
才能去偵測SDQ信號,判斷下一個bit cycle開始,











Read bit
當CPU在對BQ2022A讀取資料時,每一個bit就如下圖,CPU先拉low
,持續tRSTRB的時間,這個時間可以是1~13us,然後CPU會放開控制,
由BQ2022A來決定該bit是"0"還是"1"。直到tODHO時間到,BQ2022A
放開控制。Read bit的bit cycle與Write bit一樣,由CPU決定。在CPU
拉low,到它下一次拉low的時間。


下圖為時序表。
































市面上也有邏輯分析器可以直接將SDQ信號解碼,如前面說的,一個
完成的SDQ,一開始會有RESET->PRESENCE->Level I 的Skip 
Serialization ROM (0xCC) ->Level II的Read Memory/Page CRC->
Address Low byte->Address High byte->第一次CRC確認->Start Read
Memory ROM->End Page CRC ->Read Memory ROM of Next Page->
End Page CRC->Read Memory ROM of Final Page->End Page CRC。


























Reference
1.TI BQ2022A datasheet
http://www.ti.com/lit/ds/symlink/bq2022a.pdf
2.CRC計算網站
https://www.lammertbies.nl/comm/info/crc-calculation.html
3.孕龍邏輯分析儀
http://www.zeroplus.com.tw/logic-analyzer_tw/products.php?pdn=7&product_id=254


2019年1月23日 星期三

DSP TI TMS320F28335 PWM設置




Time Base(TB)時間基礎方塊

TBPRD:Time base period,也就是計數的周期是多少TBCLK。
TBCLK:Time base clock是由SYSCLKOUT prescale,做為TB的CLOCK,在
                 TBCTL.CLKDIV去設置。
TBCTR:Time base counter計數暫存器,可以向上也可以向下計數。
TBPHS:Time base phase相位暫存器,用來同步不同的ePWM模組。在觸發
                 ePWMxSYNCI事件,各個ePWM模組就將各自TBPHS裡的值載入到
                TBCTR。這個功能可以在TBCTL.PHSEN開啟或關閉。
TBCTL:Time base control 控制暫存器,用來設置TB裡的參數,如Clcok
                 prescale, 計數器是,向上計數/向下計數/向上向下計數方式,active
                與shadow模式的選擇。

在TBPRD、CMPA、CMPB有分成兩種模式,分別是active與shadow,在設置為
active mode的情況下,在更新TBPRD暫存器後,就會立即影響硬體,偵測到觸
發事件就會立即響應。在shadow mode則有緩衝,在更新TBPRD後,要等到
TBCTR為0,才會將TBPDR在shadown暫存器裡的值,更新到active暫存器,也
才會偵測硬體事件。這樣可以避免在軟體配置暫存器時,與硬體不同步而造成
系統崩潰或故障。






EPWMxSYNCI,同步信號脈衝,讓計數直接載入(跳到)TBPHS所設定的值。





Counter ccompare(CC)計數比較方塊

CMPA:Counter Compare A resigster計數比較暫存器A,在這個暫存器設定一個數
               值,與TBCTR的值做比較,用來設定PWM訊號的Duty。
CMPB:Counter Compare B resigster計數比較暫存器B
CMPCTL:Counter compare control計算比較的控制暫存器,裡面包括了CMPA/B要
                    被設為shadow或active模式。在shadow模式下,CMPA/B在更新後,是
                    要在CTR=PRD or CTR=0才去載入更新後的值。








Action Qualifier(AQ)動作限定方塊

AQCTLA:AQ控制暫器器A,在接收到TB送來的觸發信號CTR=PRT, CTR=ZERO,
與CC送來的觸發信號CTR=CMPA,CTR=CMPB,由這4個信號來控制EPPWMA的輸出。
設置AQCSFRC是在active模式還是shadow模式。
AQCTLB:AQ控制暫器器B
AQSFRC:AQ software force軟體強制暫存器,由軟體強制EPWM輸出為low/high/toggle
,toggle就是反轉,改變到相反準位。
AQCSFRC:AQ continute software force連續軟體強制





向上計數的範例,從AQCTLA/B去設置TBCTR=0,EPWMxA輸出high。TBCTR=CA,
EPWMxA輸出low。TBCTR=TBPRD,EPWMxA輸出high。




Dead-Bamd Generator(DB)死區方塊

DBCTL:Dead Band control死區控制暫存器,如下圖Figure31, BTCTL控制IN_MODE
POLSEL、OUT_MODE的開關。由IN_Mode
DBRED:Dead Band Rising Edge Delay死區上升邊緣暫存器
DBFED:Dead Band Falling Edge Delay死區下降邊緣暫存器







從上面的真值表來看,再對應Figure 32的波形,可以看出不同模式下EPWMxA與
EPWMxB的變化。DBCTL(IN_MODE)為"00",也就是從EPWMxA信號源來做為
EPWMxA與EPWMxB輸出。

Mode1:DBCTL(OUT_MODE)為00,表示Dead Band不動作。
Mode6:DBCTL(OUT_MODE)為01,作為FED,只有Falling Edge Delay方塊動作。
Mode7:DBCTL(OUT_MODE)為10,作為RED,只有Rising Edge Delay方塊動作。
Mode 2~5:DBCTL(OUT_MODE)為11,表示Rise edge與Falling edge delay方塊都
                    動作。EPWMxA的輸出經過上升延遲,EPWMxB的輸出經過下降延
                    遲delay。由DBCTL(OUT_POLSEL)來設置是否EPWMxA/B信號是否反
                    相。
Mode2:DBCTL(OUT_POLSEL)=10,EPWMxA/B互補,EPWMxB輸出反相, 與
               EPWMxA輸出相反。
Mode3:DBCTL(OUT_POLSEL)=01,EPWMxA/B互補,EPWMxA輸出反相, 與
               EPWMxB輸出相反。
Mode4:DBCTL(OUT_POLSEL)=00,EPWMxA/B信號同相。
Mode5:DBCTL(OUT_POLSEL)=11,EPWMxA/B信號都進行反相,所以兩個信
               號還是同相。



PWM-Chopper(PC)PWM斬波方塊

PWM斬波的功能如下
1.可由程式設置斬波頻率
2.可由程式設置第一個脈衝寬度
3.可由程式設置第2個脈衝以及後面脈衝的占空比(Duty cycle)
4.也可以旁路掉(Bypass)斬波功能

由於大多數功率器件如MOSFET,開通通電要比維持電流大得多,所以第一
個脈衝需要比較大的脈寬來導通MOSFET,後來的脈衝就可以用比較小的脈
寬來維持MOSFET的導通。

PCCTL:PWM Chopper control斬波控制暫存器
PCCTL[OSHTWTH]:設置第一個脈衝的脈寬。可設定1~16倍SYSCLKOUT/8
                                      的時間寬度。
PCCTL[CHPDUTY]:設置脈衝的占空比,從12.5%~87.5%
PCCTL[CHPFREQ]:除頻設置,從不除頻到8除頻。假設SYSCLKOUT為
                                    100MHz,在經過"/8"後,變成12.5MHz,再經過CHFREQ
                                    設置的除頻,"8除頻",PSCLK就為1.56MHz。
在第一次脈衝會由one-shot輸出,經由OSHT控制EPWM輸出,第一次脈衝後,
就由PSCLK來控制EPWM輸出。






Trip-Zone錯誤聯防方塊

Trip-Zone的功能如下
1.有輸入腳TZ1~TZ6對應到6組ePWM模組
2.在錯誤事件發生後,可以強制EPWMxA/B為高、低、高阻抗、無動作共4種
   動作。
3.在短路或過電流事件發生時,支援一次性錯誤聯防觸發(OSHT)。
4.在限流操作時,支援周期性錯誤聯防觸發(CBC)。
5.每個TZ腳位,都可以設置成OSHT或CBC,也都可以設置為中斷來源。
6.支援軟體強制錯誤聯防。也可以將錯誤聯防關閉。


TZSEL:TZ選置暫存器,個別設置TZ1~TZ6開啟或關閉錯誤聯防功能,並且為
                 一次性或周期性錯誤聯防,
TZCTL:TZ控制暫存器,設置錯誤聯防事件發生後,ePWMxA與ePWMxB各進
                 行這四個動作邏輯"高、低、高阻抗、無動作"的那一個。
TZINT:TZ中斷致能暫存器,設置一次性(OSHT)與周期性(CBC)事件發生後,
                 是否觸發EPWMx_TZINT中斷。
TZFLG:TZ中斷旗標暫存器,裡面的TZFLG.OST,TZFLG.CBC表示一次
                性(OSHT)與周期性(CBC)事件 是否 發生。當OST或CBC其中一個事件
                發生,並且PIE中斷也被致能,就會設置TZFLG.INT,表示
                 EPWMx_TZINT中斷。
TZCLR:當TZFLG裡的OSHT或CBC被設為"1"表示發生事件,就設置TZCLR裡
                 的OST與CBC為"1",來將TZFLG的旗標清除。當TZFLG.INT為"1",就
                 要設置TZCLR.INT來將TZFLG.INT清除為"0"。
TZFRC:錯誤聯防中斷強制暫存器,可以設置TZFRC.OST 或 TZFRC.CBC來強
                制TZFLG.OST與TZFLG.CBC為"1"。


一次性錯誤聯防發生後,需要軟體去將這個事件旗標(flag)清除,而周期性錯誤
聯防的事件旗標會自動被清除。








Reference