杭州應用聲學研究所 袁昌權 王 欣 翁奇財
本文提出了一種基于GD32F407的電源模塊板級管理控制器(BMC.Baseboard Management Controller)的設計,實現電源板卡內信息采集及板卡狀態(tài)機控制。該BMC滿足IPMI2.0協(xié)議,機箱控制器ChMC通過IPMB總線對板卡進行遠程控制和管理。BMC采用FreeRTOS實時操作系統(tǒng),對電源的狀態(tài)進行實時監(jiān)測。基于該BMC的電源板卡經長期使用驗證了其穩(wěn)定性及可靠性。
在某國產化平臺中,通過電源模塊實現機箱(平臺)的供電。對電源模塊工作狀態(tài)的掌握和控制,對于機箱而言是不可缺少的。電源的穩(wěn)定與否會直接影響到其他模塊的工作狀態(tài),也會影響機箱及其他板卡的使用壽命。因此,實現對電源的機箱級管理和監(jiān)控是必要的,也有助于提高電源管理效率,使得電源更加可靠和實用。
電源模塊采用國產單片機GD32F407作為控制器使用,該芯片是一款32位基于Cortex-M4架構的RISC微處理器,最高工作頻率可達168MHz,具有高性能、低功耗、外設豐富的優(yōu)點。GD32F407具有512KB片上存儲區(qū)域,能夠燒入和保存比較大的程序。同時,該芯片配備了SPI、I2C、USART、CAN等標準和高級通信接口,最多支持140各通用I/O引腳以及多達14個16位通用定時器,19個多路復用的ADC通道。因此,該芯片能夠滿足電源模塊BMC的設計和性能需求。
電源模塊BMC設計框架如圖1所示,主要由引導程序、用戶程序兩個部分組成。引導程序主要用于BMC軟件的迭代升級,正常啟動時,引導程序直接跳轉到用戶程序;在升級軟件時,引導程序進入更新模式,通過串口接收用戶程序寫入片內存儲區(qū)域。
用戶程序運行在FreeRTOS實時操作系統(tǒng)上,包括信息采集、遠程控制管理、狀態(tài)機控制、發(fā)起更新請求四個功能。FreeRTOS是一個微內核的操作系統(tǒng),具備任務調度和管理、時間管理、消息隊列、信號量等功能,同時因其可移植性強、可裁剪、多任務的特點,被廣泛應用于嵌入式領域。
圖1 BMC總體框架
本文通過在FreeRTOS中建立三個線程來實現用戶程序的功能。信息采集有兩種方式,第一種通過傳感器采集后經單片機ADC轉換得到,這種方式依賴于傳感器的靈敏度及可靠性,同時受外部環(huán)境影響較大(特別是溫度采集)。第二種方式是采用類似SynQor的MCOTS-C-270可編程全磚模塊,通過協(xié)議去訪問全磚內部模塊信息。該方式穩(wěn)定、可靠,且擴展性強,因此,本文采用第二種方式。ChMC通過兩條IPMB(I2C)總線實現對BMC的遠程控制管理,主要實現電源模塊的上下電、信息上傳、事件日志等功能。同時,兩路I2C能夠實現冗余切換,增強了交互的穩(wěn)定性。狀態(tài)機控制通過判斷各模塊的狀態(tài),在異常時執(zhí)行相應的操作,保證系統(tǒng)的穩(wěn)定性。另外,更新請求由串口中斷響應。
引導程序僅在用戶發(fā)起更新程序的請求產生響應,正常開機啟動時直接跳轉到用戶程序。因此,引導程序力求輕量、穩(wěn)定、安全,沒有采用操作系統(tǒng)。用戶通過串口發(fā)送更新請求碼到用戶程序,請求碼正確則由用戶程序跳轉到引導程序。引導程序執(zhí)行系統(tǒng)復位后,完成系統(tǒng)時鐘、串口、內部FLASH配置,等待用戶發(fā)送用戶程序執(zhí)行文件。用戶通過串口將執(zhí)行文件發(fā)送到單片機,單片機將文件校驗后再寫入到指定的FLASH區(qū)域,隨后正常啟動用戶程序,程序更新完成。
用戶程序運行于FreeRTOS操作系統(tǒng)之上,由三個線程、若干個中斷響應函數構成。根據線程功能性的不同,其優(yōu)先級高低如下:狀態(tài)機控制>遠程管理控制>信息采集。狀態(tài)機控制必須保證在出現故障的情況下立即響應,采用定時輪詢的方式進行。遠程管理控制線程由二進制信號量掛起,信號量由I2C中斷釋放。只有ChMC向BMC發(fā)送命令觸發(fā)I2C中斷時,該線程才會運行,常規(guī)狀態(tài)下不占用CPU資源。
用戶程序中涉及的中斷包含串口更新中斷、兩路I2C中斷、定時器中斷四個中斷服務程序。在默認狀態(tài)下,I2C使用第一路進行通信,第二路作為備份。因此,中斷優(yōu)先級設計如下:第一路I2C>第二路I2C>定時器中斷>串口更新中斷。定時器中斷用于為系統(tǒng)提供時間戳信息,統(tǒng)計電源板使用壽命。由于用戶程序更新不是頻繁的操作,因此其優(yōu)先級最低。
圖2 電壓-電流-溫度
電源模塊信息包括溫度信息、+12V電壓信息及電流信息。在本文中,電源采用的是SynQor的MCOTS-C-270全磚模塊,該模塊可以輸出800W功率,工作于240V~425V范圍的連續(xù)輸入電壓,且能承受240V~475V范圍的瞬態(tài)輸入電壓。除此之外,該模塊的DC-DC轉換器效率也比同類型的轉換效率更高,使得轉換器所需要散發(fā)的熱量大幅降低,更容易冷卻、降溫,對于機箱散熱的控制是十分有利的。同時,該模塊為全密封設計,在-55℃到100℃的外表溫度之間仍然能夠滿載輸出。其輸入欠壓鎖定、輸出過壓保護、主動反偏壓限制、過溫關斷、輸出限流、短路保護以及可選均流等功能使其在實際應用中具備極高的可靠性。
表1 數據寫入、讀取命令及響應格式
單片機可由RS232串口總線與全磚進行通信,通過數據寫入命令設置全磚ID、生產日期、軟件版本等信息,也能通過數據讀取命令獲取輸入/輸出電流、輸入/輸出電壓、溫度等信息。全磚終端收到正確的命令后,會立即產生一個響應。無效的命令不會產生響應。數據寫入、讀取命令及響應格式如表1所示。網絡地址字符在開機上電時即默認為“m”。為了避免命令沖突,全磚定義了各功能程序的唯一地址——即訪問地址,該地址可由char、十進制或十六進制格式制定。說明符用于區(qū)分命令的種類,“=”表示寫入命令,“?”表示讀取命令。在發(fā)出寫入命令時,只有訪問地址被選中時才能被寫入,否則無法操作訪問地址的值。寫入命令和讀取命令的響應均以換行符為終止符。
表2 電源模塊信息獲取命令及響應
電源模塊信息由全磚提供。在使用時,RS232串口波特率設置為9600、8位數據位、無校驗、1位停止位。+12V電壓、溫度及輸出電流獲取命令及響應如表2所示。在FreeRTOS系統(tǒng)中利用一個單獨的線程定時輪詢電源模塊信息,輪詢周期在百毫秒級別。線程在接收到終端結果后,需要對數據進行異常值檢測和濾波處理,以排除終端返回非法結果時造成的影響。對電源進行負載(大電阻)測試,在不加散熱的條件下,其電壓、溫度、電流曲線如圖2所示。從測試結果可以看出,全磚采集到的對外+12V電壓十分穩(wěn)定,輸出電流也很平滑,溫度上升也呈近似線性的關系。
BMC通過IPMB總線響應來自ChMC的命令。兩路I2C總線在設計時,需要考慮多個板卡并聯(lián)時I2C上拉電阻總阻值的變化,阻值過大會導致整個機箱內部I2C總線阻塞,過小則無法驅動I2C總線。因此,根據I2C總線的容性負載能力,選擇合適的上拉電阻是至關重要的。兩路I2C的乒乓冗余功能雖然能夠增強容錯能力,但因ChMC出錯或BMC未及時響應導致的總線阻塞的現象是不可避免的。在軟件的設計上,BMC的I2C處理采用非阻塞模式和錯誤處理機制。具體而言,就是在BMC向ChMC傳輸數據的過程中,檢測I2C總線的起始信號、傳輸信號、停止信號等寄存器狀態(tài)時,采用超時退出機制,并將I2C狀態(tài)標注為異常狀態(tài)。I2C異常后,狀態(tài)機會進行錯誤處理,禁用兩路I2C中斷,延時一段時間后將I2C重新初始化。該機制對ChMC出錯無效。
BMC命令符合IPMB2.0規(guī)范,其響應-應答協(xié)議如圖3所示。命令包含兩類,一類是IPMI標準命令,另一類為自定義OEM命令。IPMI標準命令包括設置/讀取系統(tǒng)時間、以及上下電。自定義命令包括設置數據命令和讀取數據命令,主要用于獲取傳感器信息、設置傳感器報警值。
BMC在收到命令后,由命令解析器解析命令數據包,在提取出命令字中的功能碼后,觸發(fā)響應處理器執(zhí)行功能處理,并將處理結果組裝成響應消息包上傳給ChMC。ChMC訪問傳感器信息時,BMC會對各個傳感器狀態(tài)進行輪詢,同時,根據輪詢結果和報警值進行比較。如果超過上限值或低于下限值,則產生報警報警事件,并由報警處理器將數據和狀態(tài)信息以響應消息的形式上傳給ChMC,同時更新狀態(tài)信息,通知狀態(tài)機對報警進行本地處理。
當然,為防止傳感器數值異常造成錯誤報警,報警分為臨時報警和持續(xù)報警。當第一次觸發(fā)報警時,報警被設置為臨時報警;當一定周期內連續(xù)觸發(fā)報警,則調整為持續(xù)報警。同樣地,若在一定周期內報警未被觸發(fā),則取消報警,報警處理器更新狀態(tài)信息。
根據實際的需求,傳感器的報警值設置為臨界值和故障值以及上、下限各兩條,即UC和UNC、LC和LNC,分別為故障上限、臨界上限,故障下限、臨界下限。在ChMC利用瀏覽器訪問BMC的傳感器信息如圖4所示。
狀態(tài)機控制主要用于保證電源模塊的正常工作狀態(tài),在BMC層級對模塊狀態(tài)進行實時監(jiān)控和管理。在系統(tǒng)啟動完成必要的硬件初始化后,首先建立并啟動狀態(tài)機控制線程,定時輪詢各硬件模塊的狀態(tài)信息。在啟動一定時間內硬件正常的情況下,開始對外供電。在狀態(tài)機中使能看門狗,當操作系統(tǒng)因為異常無法運行時,看門狗執(zhí)行MCU復位操作重啟電源模塊。
狀態(tài)機同時響應來自報警處理器的消息。當出現溫度過高、電流過大的故障報警時,狀態(tài)機會停止對外供電,等待用戶的操作。
由于BMC和ChMC之間通過I2C總線進行通信,當總線出現阻塞時,ChMC就無法對BMC進行管理控制。因此,在狀態(tài)機中引入I2C錯誤處理機制是必要的。當I2C異常時,狀態(tài)機會向總線發(fā)送停止信號,在延時一定時間后,重新初始化I2C組件,并使能I2C中斷。
結束語:本文提出了一種基于GD32F407的電源模塊BMC設計,通過引入IPMI協(xié)議,可以實現對電源模塊的遠程控制,從而能夠實現機箱的遠程復位、監(jiān)控等操作。同時,在BMC中加入了狀態(tài)機控制機制,能夠實現模塊的自我監(jiān)測,當電壓、電流、溫度等發(fā)生異常時,模塊能夠實現自我保護,提高了電源的工作穩(wěn)定性和可靠性。