(珠海市光聯(lián)通訊技術有限公司 OMS/軟件組,珠海 519030)
嵌入式系統(tǒng)(Embedded system)是一種“完全嵌入受控器件內(nèi)部,為特定應用而設計的專用計算機系統(tǒng)”,根據(jù)英國電氣工程師協(xié)會的定義,嵌入式系統(tǒng)為控制、監(jiān)視或輔助設備、機器或用于工廠運作的設備。與個人計算機這樣的通用計算機系統(tǒng)不同,嵌入式系統(tǒng)通常執(zhí)行的是帶有特定要求的預先定義的任務。由于嵌入式系統(tǒng)只針對一項特殊的任務,設計人員能夠對它進行優(yōu)化,減小尺寸降低成本。
Linux是類Unix操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng),用C語言寫成,符合POSIX標準的類Unix操作系統(tǒng)。
Linux是一款免費的操作系統(tǒng),用戶可以通過網(wǎng)絡或其它途徑獲得,并可以任意修改其源代碼,這是其它的操作系統(tǒng)所做不到的。正是由于這一點,來自全世界的無數(shù)程序員參與了Linux的修改、編寫工作,程序員可以根據(jù)自己的興趣和靈感對其進行改變,這讓Linux吸收了無數(shù)程序員的精華,不斷壯大。
Linux內(nèi)核的主要模塊(或組件)分為以下幾個部分:存儲管理、CPU和進程管理、文件系統(tǒng)、設備管理和驅動、網(wǎng)絡通信,以及系統(tǒng)的初始化(引導)、系統(tǒng)調(diào)用等。
本系統(tǒng)主機采用的是Linux嵌入式操作系統(tǒng)。
本系統(tǒng)由主機和從機構成,主機采用嵌入式Linux操作系統(tǒng),從機為K20 MCU,主、從機之間采用I2C總線通信方式:
從機MCU型號是恩智浦MK20DN512ZVLL10-ND,自帶I2C總線接口和SCI接口(備用),通過I2C總線接口與主機通信;通過SCI接口可與PC機通信。
系統(tǒng)硬件I2C總線部分原理圖如圖1所示。
圖1 I2C部分原理圖
從機MCU firmware升級主要有兩種方法:通過PC和通過主機。
方法一:通過PC,該方法在沒有主機的情況下大量使用,技術成熟,本文不做詳細描述。
從機利用備用的SCI接口,通過PC按XMODEM協(xié)議升級下載firmware成功,驗證從機代碼和firmware升級包都正確。
升級包描述如下:
I2C從設備地址(1byte)FWDATA(6 bytes)0x20(1 byte)Data0……Data31
每包包長度為40個bytes=從設備地址+FWDATA的ASCII碼(不分大小寫)+0x20+Data0+……+Data31。
方法二:通過主機,系統(tǒng)主機通過I2C總線接口與從
機通信,在發(fā)送命令、接收數(shù)據(jù)等都正常的情況下,主機通過網(wǎng)頁界面、I2C總線通信對從機firmware升級,下載失敗,下面做詳細描述。
用示波器抓SDA波形,正確的和錯誤的SDA波形比較如下:
① 正常的波形是每個byte后跟ACK(即第9個SCK對應的SDA為0),正確波形如圖2所示。
② 從機接收升級數(shù)據(jù)包時,前8個bytes正常,每個byte后跟一個ACK,即Data0之前的地址、命令(FWDATA)等都正常,從Data0開始到Data31,不定某個位置開始出現(xiàn)NACK,直到stop前一直都是NACK,錯誤波形如圖3所示。
圖2 正確波形
圖3 錯誤波形
下面對升級失敗原因進行分析:
① 對不同主、從機I2C總線升級結果及波形對比結果如下:
主機S3C2440主機XA9S12從機DSP升級OK,波形如圖4-----------從機K20升級NO,波形同DSP升級OK,波形如圖5
②兩種升級成功的SDA波形比較及有關參數(shù)如圖4、圖5所示。
所采用的改進措施和改進結果比較如下:
① 改硬件上拉電阻,無效,方法如下:去掉從機I2C
總線上拉電阻(圖1的R24和R25),波形無改善,升級不成功;去掉從機I2C總線上拉電阻(圖1的R24和R25),并且短路圖1的U4芯片,波形無改善,升級不成功。
② I2C總線 通信速度由400 kHz降為100 kHz,升級不成功。
③ 配置主機SDA延遲時間(即SDA hold時間)由5clocks改為0,升級通過,但SDA建立時間仍為80 ns,SDA hold時間由200 ns變?yōu)?00 ns,波形如圖6、圖7所示。
圖4 S3C2440&&DSP(SDA建立時間為80 ns)
圖5 XA9S12&&K20(SDA建立時間為460 ns)
圖6 SDA延遲5clocks(SDA hold時間為200 ns)
④ 增加SDA建立時間,修改后SDA建立時間由80 ns增加到180 ns,滿足I2C總線 datasheet要求,針對上述第3條兩種配置,升級都成功。
參考s3c2440A白皮書(圖8)以及K20 白皮書(圖9)。
圖7 SDA延遲0clocks(SDA hold時間為100 ns)
圖8 s3c2440A白皮書部分
圖9 K20白皮書部分
主機代碼做了如下修改,升級成功,I2C總線接口時序符合標準:
① 修改函數(shù)static int i2s_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat),增加ndelay(1);//等待建立時間
② 增加ndelay(5)后,SDA建立時間為580 ns,波形如圖10所示。
圖10 增加ndelay(5)后波形圖