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