1 引言 在微電子行業,芯片封裝好后無不例外要進行系統級的驗證,以檢查芯片功能是否正確。 MV05 芯片是本課題組自主設計的一款芯片,本文介紹了一種對該芯片進行測試的方法,上 位機通過芯片內置的一個單獨UART 通訊模塊向下位機發送指令,再判斷芯片執行指令是否 正確,從而確定芯片功能是否符合設計要求。 上位機使用VC++編寫控制軟件,VC++由于功能強大和應用靈活, 得到Microsoft 系統的 最好支持, 具有圖形界面友好、系統資源豐富、操作配置方便、運行速度較快等特點。而串 口通信具有實現簡單, 使用靈活方便, 數據傳輸可靠等優點, 因而用VC++編制串口實時控 制軟件十分方便。下位機使用匯編語言編程,匯編語言使用靈活,執行效率高,在芯片測 試方面非常實用。MV05具有8051的所有功能,在其基礎上增加了PWM功能,本文只對PWM功能 測試進行介紹。 2 芯片簡介 MV05是上海大學微電子研究與開發中心自主研發的一款芯片,完全擁有自主知識產權, 該芯片用于對汽車發動機冷卻風扇的控制。此芯片含一個8051系列內核的CPU,它的指令集 與標準8051內核完全兼容。經過重新設計的內核,指令周期變為4個系統時鐘周期。相比標 準8051平均效率提高2.5倍。作為標準8051CPU,含有一個8位的CPU內核,8位指令操作代碼, 8位操作數,8位數據總線以及16位地址總線。內置兩路PWM輸出,一個單獨的UART通訊模塊 , 工作電壓3.3V,采用chartered0.35um 2p4m CMOS工藝。 PWM 模塊具有自定義輸出和動態跟蹤外部信號兩種功能,通過設置PWMMODE 來選擇這兩 種功能,而且兩路PWM 具有獨立和互補的工作模式。當工作在獨立模式時,兩路PWM 可獨立 輸出PWM 波。芯片的PWM 功能復用到p1 口上,其中p1.2,p1.3 用于捕獲輸入,P1.4,P1.5 用于PWM 雙通道脈寬調制輸出信號。PWM 模塊定義的寄存器如下: PWMMODE: PWM 方式寄存器用于對對PWM 的工作方式進行設置,包括用戶自定義模式和捕獲外部輸入信號模式。 PWMCON: PWM 控制寄存器,用來控制PWM 功能的開啟和關閉。 Tcap1CON: 捕獲1 控制寄存器,用于設置捕獲采樣的外部信號周期數 Tcap2CON 捕獲2 控制寄存器,用于設置捕獲采樣的外部信號周期數 UTL0 PWM0輸出的周期寄存器低8 位 UTH0 PWM0輸出的周期寄存器高8 位 UWL0 PWM0輸出的脈寬寄存器低8 位 UWH0 PWM0輸出的脈寬寄存器高8 位 UTL1 PWM1輸出的周期寄存器低8 位 UTH1 PWM1輸出的周期寄存器高8 位 UWL1 PWM1輸出的脈寬寄存器低8 位 UWH1 PWM1輸出的脈寬寄存器高8 位 UTL0,UTH0 ,UWL0 ,UWH0 ,UTL1,UTH1,UWL1,UWH1 用于用戶自定義模式下PWM 波占空比的設置。 3 上下位機通信協議 上下位機進行通信就要約定通信協議。上位機每次向下位機發送數據時首先發送“48 59 4c”3 個數據, 下位機判斷接收到的前3 個數據是不是“48 59 4c”,如果是則繼續接收后 面的數據,否則丟棄數據。“48,59,4c”后面緊跟的是8bit 數據,下位機接收到該8bit 數 據后進行按位解析,按照約定相應的位進入相應的特殊功能寄存器,下位機配置好特殊功能 寄存器后便會執行相應操作,從而驗證芯片功能是否正確。通過該協議可以降低下位機的編 程復雜度,接收一次數據就可以將所需配置的寄存器配置好,從而也提高了通信的效率。PWM 用戶自定義模式下的數據包的格式如表1 所示。 PWM 捕獲模式下與PWM 用戶自定義模式的數據包除了bit4"bit2 三位表示的意義不同 外,其余各位表示的意義相同,捕獲模式下 bit4"bit2 用來設置捕獲外部信號的周期數: 000:單個周期;001:兩個周期;010:4 個周期依次類推周期數成倍增長。 4 上位機軟件設計 本文上位機軟件使用VC++6.0 開發。使用VC++最重要的就是能夠了解控件的屬性,熟 練對控件編程。VC++6.0 中的每個控件都有一個ID 號進行標識,每個ID 可以映射成一個變 量或響應函數。VC++6.0 中的類是方法和變量的總和,通過例化該類使用其中的方法和變量, 如本軟件中的串口設置對話框: CSettingDlg setDlg; // 例化 m_nPort = setDlg.m_nPort; //變量傳遞 將CsettingDlg 中的 m_nTime = setDlg.m_nTime; //變量映射到主控類的變量 m_strSettings = setDlg.m_strSettings; 4.1 串口通信模塊設計 在Microsoft Windows 下開發串行通信程序的方法有:(1)利用WindowsAPI通信函 數(2)利用Windows的讀寫端口函數或開發驅動程序直接對串口進行操作(3)利用第三方 提供的通信類(4)使用串口通信組件。其中第四種方法較簡單,只需要對串口進行簡單設置。本上位機串口通信程序使用MSComm控件進行開發。 MSComm控件是Microsoft公司提供 的簡化Windows下串行接口收發數據的簡便方法。MSComm處理數據有兩種方法, 查詢法和事 件驅動法,本文使用事件驅動法。 串口設置對話框獨立于主對話框,通過串口設置按鈕彈出,用戶可以在串口設置對話框 中進行串口選擇,設置波特率、停止位、校驗位等參數。軟件在主控類中定義了一個全局 變量m_strSendString,上位機要發送的數據賦給該變量,然后通過發送函數發送出去。 4.2 PWM 模塊 PWM 模塊包括PWM 用戶自定義模塊和PWM 捕獲模塊,PWM 捕獲模塊與PWM 用戶自定義模 塊在控件使用和編程思想上是一樣的,只不過數據包各位代表的意義不同,因此這里只介紹 PWM 用戶自定義模塊,PWM 捕獲模塊不再贅述。 PWM 用戶自定義模塊可以設置芯片PWM 模塊的工作周期和PWM 波不同占空比,另外還增 加了ADC 聯動功能。增加ADC 聯動功能是為了測試下一款芯片功能設計的,此次測試并未用 到。PWM 模塊的工作周期選擇,PWM 波占空比選擇和ADC 聯動功能選擇用復選框表示,用戶 根據自己測試需要,選擇不同的選項,最后按“確定”按鈕將所選項目封裝成數據包,按“啟 動PWM”按鈕將測試指令發送到下位機,進行測試。 根據通信協議將用戶選擇測試的項目封裝成一個8 位數據包,該數據包存放在一個整型 數組里面,將該8 位數據看作是一個字符的二進制表示,根據每位數據所占的權值取加權和 得到一個10 進制數,最后將該10 進制數轉化為一個16 進制數,該16 進制數就是最終要封 裝的數據包。為了防止用戶誤選測試項目,軟件中作了一些安全處理,當用戶選擇同類中的 一個測試項目后其它項目會變為不可選。軟件界面如圖1 所示。 PWM 用戶自定義模式下數據包封裝函數代碼如下: void CCommWizardDlg::OnButtonUsrMode() { UpdateData(TRUE); //數據更新 CString strtemp; int s1; //存放數據包數據的數組 unsigned char c1; // 時鐘選擇 if(this->m_Check1) {s1=0;s1=0;}// 單時鐘 if(this->m_Check2) {s1=0;s1=1;}// 雙時鐘 if(this->m_Check3) {s1=1;s1=0;}// 四時鐘 if(this->m_Check4) {s1=1;s1=1;}// 12 時鐘 //占空比設置 if(this->m_Check9) {s1=0;s1=0;s1=0;}// 1:1 if(this->m_Check10) {s1=0;s1=0;s1=1;}// 1:2 if(this->m_Check11) {s1=0;s1=1;s1=0;}//1:3 if(this->m_Check12) {s1=0;s1=1;s1=1;}//1:4 if(this->m_Check13) {s1=1;s1=0;s1=0;}//1:5 if(this->m_Check14) {s1=1;s1=0;s1=1;}// 1:6 if(this->m_Check15) {s1=1;s1=1;s1=0;}// 1:7 if(this->m_Check16) {s1=1;s1=1;s1=1;}// 1:8 //PWM -ADC 控制 if(this->m_Check5) {s1=0;s1=0;}// 0 主0 控 if(this->m_Check6) {s1=0;s1=1;}// 0 主1 控 if(this->m_Check7) {s1=1;s1=0;}// 1 主0 控 if(this->m_Check8) {s1=1;s1=1;}// 1 主1 控 s1[0]=0; //用戶自定義模式選擇 c1=s1[0]*128+s1*64+s1*32+s1*16+s1*8+s1*4+s1*2+s1*1 ; strtemp.Format("%02X ",c1); //10 進制轉化為16 進制 m_strSendString=(CString)"48 59 4C " + strtemp ; } 5 下位機軟件 下位機軟件包括串口通信模塊和PWM 功能配置模塊。串口部分使用中斷方式接收數據, 當接收到上位機的命令執行中斷服務程序轉到PWM 功能配置模塊,PWM 功能模塊對接收到的 數據進行按位解析,根據通信協議將不同的數據位送到不同的寄存器。該方法對其它測試系 統具有借鑒意義。 6 結束語 本文介紹了上海大學微電子研究與開發中心研發的一款汽車發動機冷卻風扇控制芯片, 給出一種使用VC++6.0編寫上位機軟件對其進行測試的方法。本文的創新點是構造數據封裝 函數,將用戶要測試的項目一次發送給下位機,下位機按位解析數據包,將相應數據位送入 相應寄存器。通過調試證明該方法是完全可行的,提高了測試效率,測試結果達到了預期設 計指標,芯片功能完全正確。 |