高通平臺(tái)Driver開(kāi)發(fā)的參考文檔_第1頁(yè)
高通平臺(tái)Driver開(kāi)發(fā)的參考文檔_第2頁(yè)
高通平臺(tái)Driver開(kāi)發(fā)的參考文檔_第3頁(yè)
高通平臺(tái)Driver開(kāi)發(fā)的參考文檔_第4頁(yè)
高通平臺(tái)Driver開(kāi)發(fā)的參考文檔_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高通平臺(tái)Driver開(kāi)發(fā)的參考文檔528535002.doc版權(quán)說(shuō)明本文本中所包含的一切信息,包括文字,圖表,數(shù)據(jù),圖形,圖象,方法和思想都是聯(lián) 想移動(dòng)通信科技有限公司財(cái)產(chǎn),未經(jīng)聯(lián)想移動(dòng)通信科技有限公司書面授權(quán),任何個(gè)人和 組織都無(wú)權(quán)透露,拷貝,復(fù)制,拍照和傳輸該文本中的一切信息。聯(lián)想移動(dòng)通信科技有限公司版權(quán)所有聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處528535002.doc修訂記錄版本作者審核批準(zhǔn)日期修改說(shuō)明1.00Chenljc2009/11/13CreateII聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處聯(lián)想528535002.doc目錄 TOC o 1-5 h z HYPERLINK l bookmark6 o Cur

2、rent Document 第1章前言3 HYPERLINK l bookmark8 o Current Document 文檔目的及開(kāi)發(fā)背景 3 HYPERLINK l bookmark10 o Current Document 參考文獻(xiàn) 3 HYPERLINK l bookmark12 o Current Document 術(shù)語(yǔ)和縮寫解釋3 HYPERLINK l bookmark14 o Current Document 第2章綜述5 HYPERLINK l bookmark16 o Current Document 高通平臺(tái)的硬件架構(gòu) 5 HYPERLINK l bookmark18

3、o Current Document 高通平臺(tái)驅(qū)動(dòng)文件結(jié)構(gòu) 6 HYPERLINK l bookmark20 o Current Document ARM相關(guān)知識(shí)6ARM基本知識(shí)6ARM存儲(chǔ)器格式 9 HYPERLINK l bookmark22 o Current Document 第3章 Driver相關(guān)模塊介紹 10 HYPERLINK l bookmark24 o Current Document REX 簡(jiǎn)介10 HYPERLINK l bookmark26 o Current Document Boot11Nor Boot13Nand Boot13Boo蹄程14 HYPERLINK

4、 l bookmark28 o Current Document Gpio15GPIO的作用15GPIO的用法16GPIO注意事項(xiàng)19 HYPERLINK l bookmark30 o Current Document 內(nèi)存管理19隊(duì)歹U ( Queue) 19DS存儲(chǔ)池 20Watermark flow control point22 HYPERLINK l bookmark36 o Current Document Sleep25Sleep硬件相關(guān)知識(shí)25Sleep軟件相關(guān)知識(shí) 26查Sleep電流方法 27 HYPERLINK l bookmark38 o Current Documen

5、t SIO283.6.1 SIO模塊的架構(gòu) 283.6.2 SIO數(shù)據(jù)處理流程 29 HYPERLINK l bookmark40 o Current Document 3.7重啟問(wèn)題分析30 HYPERLINK l bookmark42 o Current Document 軟件狗檢測(cè)異常 30發(fā)生data abort導(dǎo)致重啟31 HYPERLINK l bookmark44 o Current Document 指針未初始化引起的系統(tǒng)重啟 31注意事項(xiàng)32聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處-I -528535002.doc聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處-II528535002.doc第1章前言文檔目的及開(kāi)

6、發(fā)背景本文為高通平臺(tái) driver開(kāi)發(fā)的學(xué)習(xí)文檔, 對(duì)部分概念性的東西進(jìn)行了學(xué)習(xí)和總結(jié)。由于driver的跨度太大,內(nèi)容很多,加上本人水平有限。如有不足之處及遺漏地方,麻煩大 家多多包涵!希望這份文檔能對(duì)大家學(xué)習(xí)高通平臺(tái)的驅(qū)動(dòng)開(kāi)發(fā)有所幫助!參考文獻(xiàn)序號(hào)文檔名稱作者出 版 單 位180-VC881-1&QSC6055&QSC6065QSC6075 AND QSC6085 SINGLECHIP DEVICE SPECIFICATIONQualcomm-280-VC881-2&QSC6055,QSC6065, QSC6075,QSC6085SOFTWAREINTERFACEQualcomm3注:高通

7、提供的文檔比較詳細(xì),各個(gè)模塊都有相關(guān)文檔!因?yàn)槲臋n提供比較齊全(需要自己去下, 對(duì)于初學(xué)者是個(gè)難題),相對(duì)來(lái)說(shuō)他的技術(shù)支持不怎么樣!有得必有失!術(shù)語(yǔ)和縮寫解釋術(shù)語(yǔ) 和縮 寫解釋聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處3 -528535002.docDSDATA ServiceSIOSerial Input&OutputRDMRuntime Device MappeBTBlue ToothPBLPrimary Boot Loader聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處4 -528535002.doc第2章綜述高通平臺(tái)的硬件架構(gòu)目前開(kāi)發(fā)EVDO的手機(jī)或模塊大部分采用了 QSC6085平臺(tái)。高通QSC系列的平臺(tái)是高度集成化,

8、它將PMIC、RF相關(guān)模塊也集成到一塊芯片里(其他公司很少做到這點(diǎn)),對(duì)硬件來(lái)說(shuō)可以省很多事。除了上述特殊模塊之外,當(dāng)然也包括一般的LCD、 KPD、AUDIO CODEC 等彳艮多當(dāng)區(qū)動(dòng)模塊!具體如下圖所示:02.3.2 ARM存儲(chǔ)器格式在ARM體系中,每個(gè)字單元包含4個(gè)字節(jié)單元或者兩個(gè)半字單元;一個(gè)半字單元中包含兩個(gè)字節(jié)單元。但是在字單元中,4個(gè)字節(jié)哪一個(gè)是高位字節(jié),哪一個(gè)是低位字節(jié)則有兩種不同的格式;big_endian格式和little-endian 格式。比如一個(gè)整型數(shù)0 x12345678在內(nèi)存中如下圖所示|78 | xxxx_0000|56 | xxxx_0001|34 | xx

9、xx_0002 |12 | xxxx_0003Little Endian|12 | xxxx_0000|34 | xxxx_0001|56 | xxxx_0002|78| xxxx_0003Big Endian聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處9 -528535002.doc第3章Driver相關(guān)模塊介紹3.1 REX簡(jiǎn)介雖說(shuō)目前QSC60X5平臺(tái)上采用L4操作系統(tǒng),REX只是L4上面的一個(gè) Task。但高通為了開(kāi)發(fā)的兼 容性,提供的API仍然采用老的一套接口(可能內(nèi)部實(shí)現(xiàn)不一樣),很容易將老的代碼移植到新的架構(gòu)中。那么我還試必要介紹一下REX。REX是一個(gè)操作系統(tǒng)的名字,它是Real-time Exe

10、cutive 的縮寫。它是美國(guó)的 QUALCOMM 開(kāi)發(fā)的,REX是一個(gè)簡(jiǎn)單的、高效的、搶占式的、多任務(wù)的、嵌入式實(shí)時(shí)操作系統(tǒng)。它最初是為應(yīng)用于Intel的80186而設(shè)計(jì)的,如今它已經(jīng)被移植到了ARM微處理器上。下面是它比較重要的幾個(gè)概念(其實(shí)和其他操作系統(tǒng)一樣):1、 TaskREX把任務(wù)當(dāng)作獨(dú)立運(yùn)作的實(shí)體,每一個(gè)任務(wù)都有自己獨(dú)立的堆棧和優(yōu)先級(jí)。每個(gè)任務(wù)都有一個(gè)數(shù)據(jù)結(jié)構(gòu),我們稱為任務(wù)控制塊(TCB REX允許在運(yùn)行時(shí),在任何時(shí)間動(dòng)態(tài)的創(chuàng)建任意數(shù)量的任務(wù)。但是創(chuàng)建的任務(wù)越多,REX的性能便稍微遞降,這是因?yàn)槟銊?chuàng)建的任務(wù)越多,任務(wù)列表越長(zhǎng)。所以你需要確保你創(chuàng)建的任務(wù)數(shù)量盡量小。另外,REX任務(wù)

11、的負(fù)載量還跟你選擇的處理器有關(guān)。F面的圖描述了 REX任務(wù)的啟動(dòng)過(guò)程:以下圉表殆出一個(gè)隹身的啟助日程r.也.】&上:口號(hào)J處E TASK恥V JAJK任春祈自化”也“ :H 所EFlt悝It芻這個(gè)任翁的優(yōu)先桀餐離肝.血維礴執(zhí)行這個(gè)任量任看韜四TCB也是一個(gè)比較重要的結(jié)構(gòu)體,各個(gè) task都有一個(gè)全局變量 tcb,這個(gè)tcb包含了很多重要信息 如,任務(wù)優(yōu)先級(jí)、堆棧指針,信號(hào)量等,這些有時(shí)對(duì)查死機(jī)問(wèn)題很有幫助。2、任務(wù)調(diào)度聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處-10 -528535002.docREX總是選擇處于就緒態(tài)的最高優(yōu)先級(jí)的任務(wù)進(jìn)行調(diào)度,如果任務(wù)的優(yōu)先級(jí)不是唯一的,REX可能選擇任何一個(gè)處于就緒態(tài)的最高

12、優(yōu)先級(jí)的任務(wù)進(jìn)行調(diào)度。被選擇的任務(wù)會(huì)一直執(zhí)行,直到它自愿掛 起或者中斷發(fā)生而激活了更高優(yōu)先級(jí)的任務(wù)。當(dāng)被掛起的任務(wù)的等待條件得到滿足時(shí),該任務(wù)就變成了就緒態(tài)。如果所有的認(rèn)為都掛起的時(shí)候,那么空閑認(rèn)為就被執(zhí)行。REX提供了一種機(jī)制,允許任務(wù)可以動(dòng)態(tài)的提高或降低自己或其它任務(wù)的優(yōu)先級(jí)。3、信號(hào)量信號(hào)量是任務(wù)之間進(jìn)行通信和同步的橋梁。信號(hào)量是REX提供的一種任務(wù)間通信的機(jī)制。每個(gè)任務(wù)都有一套與之相關(guān)聯(lián)的通用信號(hào)量,信號(hào)量通常作為任務(wù)的 TCB的一部分,它們被用來(lái)通知任務(wù)某種事件的發(fā)生,任務(wù)的信號(hào)量可以被任何其它任務(wù)或中斷設(shè)置或清除。信號(hào)量實(shí)際上是一種約定機(jī)制,在多任務(wù)內(nèi)核中普遍使用,信號(hào)量用于:控制

13、共享資源的使用權(quán)(滿足互斥條件);標(biāo)志某事件的發(fā)生;使2個(gè)任務(wù)的行為同步。4、中斷REX是一個(gè)可剝奪的內(nèi)核。當(dāng)從中斷返回的時(shí)候,控制權(quán)就被傳遞給處于最高優(yōu)先級(jí)的就緒任務(wù),而沒(méi)有必要返回到被 ISR中斷了的任務(wù)處。一般我們只會(huì)掛載 GPIO中斷,后續(xù)會(huì)介紹。5、定時(shí)器定時(shí)器,英文是timer。和其它內(nèi)核一樣,RE濯求給用戶提供定時(shí)時(shí)間,來(lái)實(shí)現(xiàn)超時(shí)控制等功能。REX中有些信號(hào)是事件觸發(fā)引起,也可以由 timer引起。一旦由于某種原因,等待的事件 信號(hào)一直等不到,這時(shí)可以用timer定時(shí)來(lái)產(chǎn)生信號(hào)量。關(guān)于以上幾個(gè)概念,高通都提供了相關(guān)接口操作,具體參看代碼!3.2 Boot高通平臺(tái)系統(tǒng) Memory

14、組成可以分為:NAND+SDRAM 和NOR+PSRAM 。兩者配置不能并存,這 也就決定了有兩種 boot模式,具體決定采用哪種Boots方式是Boot_mode引腳決定。聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處11 -528535002.doc高通60 x5系列采用了 Multi-Image-Boot 技術(shù),這可以從高通的代碼看出,typedef enwnHOilEIMG = Q-QEM_后Alts S IMG,QCSBL_IMGfHASH IMG f,MOST血_TM&,CFG DATA,MAX二 IMG = 0 x7FFFFFFF image type;從上述枚舉變量中可以看出,flash中有多個(gè)im

15、age.其中QCSBL+OEMSBL =SBL , SBL就相當(dāng)于bootloader, Bootloader 主要是在Nand啟動(dòng)方式中起作用!原因后續(xù)介紹!其中每個(gè)Image又是由三個(gè)部分組成:聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處12 -528535002.doc代碼區(qū)簽名區(qū)證書區(qū)其中簽名段和證書段是用來(lái)校驗(yàn)代碼段的完整性與合法性的 步驟。代碼段就不需要我說(shuō)了吧。在啟動(dòng)過(guò)程中就可以看到校驗(yàn)的相關(guān)3.2.1 Nor Boot變量存在PSRAM ,所以從NOR啟動(dòng)不NOR啟動(dòng)模式太簡(jiǎn)單,一般只要將Nor Flash掛載到EBI1上,然后做些簡(jiǎn)單的操作,就可以直接運(yùn)行。在高通代碼中關(guān)于這方面的注釋也很少。3

16、.2.2 Nand BootBootloader,那么 bootloader 的作用:Nand Flash沒(méi)有地址線,代碼不能直接運(yùn)行,因此需要聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處13 -528535002.doc/ecot/o 岐幫set the stack for boot loadereiiahm all MSM6550 clock region a】id PLL regionassert the PS_HOLD pm for PM used、【he GPIO fm oitr used SDRAN4mit the NIPMCdisable die XIML- and enable the iiitn

17、icrion cache, nand fhsh mit and probe the cuncnt iwnd fhsh deviceS. check di? BIB inionnation on NAND fhw】icopy and vurify thf code to SDRA31 1set the vecior addiess fiom OxffffOOOO to 0 x0jump to pc=0 x0bootloaderBIBImageEfs可以看出相對(duì) NOR boot,Nand boot復(fù)雜很多。它需要將falsh中的Image復(fù)制到SDRAM ,然后才能執(zhí)行。并且要對(duì)各個(gè)image進(jìn)

18、行校驗(yàn)。3.2.3 Boot 流程Boot是一個(gè)很復(fù)雜的過(guò)程,尤其是 Nand Boot ,需要你對(duì) ARM架構(gòu)很深的了解,這邊只是簡(jiǎn)單示 意相關(guān)流程,具體大家可以參考代碼!聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處14 -528535002.doc1 n moh ilo. c fllntask wlH dof and run task nclud ui task)3.3 Gpio3.3.1 GPIO的作用GPIO作為QSC60X5與外界溝通的橋梁,主要有四個(gè)作用:.通過(guò)GPIO向外部輸出一個(gè)高/低電平,控制外部的器件或者通知外部器件某事件的發(fā)生。例如我們可以通過(guò) GPIO 輸出一個(gè)高電平點(diǎn)亮一個(gè)LED ,或者

19、輸出低電平關(guān)掉一個(gè)LED.通過(guò)GPIO讀入一個(gè)外界的高低電平輸入,檢測(cè)外部器件的當(dāng)前狀態(tài)。例如鍵盤按鍵是否按下的探測(cè)。.將GPIO 口作為外部中斷信號(hào)的一個(gè)輸入口,實(shí)時(shí)檢測(cè)外部事件的發(fā)生.將GPIO用作其他特定用途。例如用作I2C通信、數(shù)據(jù)線、地址線等。聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處15 -528535002.doc3.3.2 GPIO的用法.配置一個(gè) GPIO 口。通常一個(gè) GPIO有多種功能,我們可以將GPIO 配置為符合我們當(dāng)前需要的功能;同時(shí)我們也可以將 GPIO配置為內(nèi)部具有上拉電阻、下拉電阻或者沒(méi)有任何上下拉電阻。文件GPIO_60 x5.c中定義了配置GPIO的函數(shù)接口void gpi

20、o_tlmm_config(GPIO_SignalType gpio_signal)(gpio_signal指定要配置成的功能,文件 GPIO_60 x5.h 枚舉出了每個(gè)GPIO的可配置的功能選項(xiàng):typedef enum non_einp t y_f unc_ptr ;= wm_pt r-nGH_emp c y_ nGolat a;USif WlCCB 什; i finiIi al count vun_ptF-hiaterroark)cb tmp ptr = wm ptir-h.iwater fund ptu:cb_t-mp_data - wm pt,r-hiwt.er_f unc_daL

21、a;sS_jwCcb ();)if Ccngueue)(cb_tmp_p t. r = wni_p tr- each_enq;iLe ue_f unc_ptr ;cb2tttlPdaca _ win_f)tr-eftch_en.ueue_func_data;DSM WlCCB () ;)if11 al count- = wm ptr-LD wnatermark. &5win ptr-current ent -Lowater funu_ptr, 亡 b 二twp 二日丹ta = wm_vtr-LowateF_ unc_data;nsS tfM二S ();上面的代碼可以看出,在入隊(duì)時(shí),根據(jù)隊(duì)列的情

22、況進(jìn)行了相應(yīng)情況的call back調(diào)用。換句話講,就是當(dāng)隊(duì)列發(fā)生變化時(shí),watermark將調(diào)用不同的函數(shù)以響應(yīng)這些變化??梢?jiàn),watermark可以看成是一種基于隊(duì)列操作的隊(duì)列管理機(jī)制。示意圖如下聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處24 -528535002.doc|_ escti item func 0h iwatr_fUncL_ptj:Hi 方atutna二 knon_*tiipi!y_fune_ptriLt為1 o ira t tr fun c pt r3.5 SleepSleep硬件相關(guān)知識(shí)Sleep 電一般我們直觀觀察高通是否進(jìn)入睡眠可以通過(guò)數(shù)字電源來(lái)觀察,那么有必要對(duì)睡眠相關(guān)的 流概念有所

23、了解:聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處25 -528535002.docCDMA RXP白白 kqeak variaton oi CDLrA Rx CdnentCDMA5LEEPc鏟心二制制 確琳怖刪wo橢棚價(jià)w楸腳惻Currnl 不ri:ii:ivsMta(500 tnsidivCDMASLEEPCunenlCDMA手機(jī)的Idle狀態(tài)的電流如上。有 3個(gè)概念描述如下:Average sleep current: 0.4-0.9mA.根據(jù)手機(jī)功能,顯示屏的要求不同而不同。Average Rx current:手機(jī)處于睡眠狀態(tài)時(shí),需要定時(shí)從基站接收消息。此刻手機(jī)接收系統(tǒng)喚醒。正 常的手機(jī)paging應(yīng)是

24、規(guī)則的。Idle電流:是指手機(jī) sleep current 和Rx current的時(shí)間平均值。影響手機(jī)Idle電流的主要因素是sleep底電流。RX電流的寬度和高度在芯片組和協(xié)議棧定好以后,一般開(kāi)發(fā)者沒(méi)有能力改變。Sleep軟件相關(guān)知識(shí)在高通平臺(tái)上,Sleep由sleep task進(jìn)行管理,sleep任務(wù)的優(yōu)先級(jí)最低(優(yōu)先級(jí)2).當(dāng)沒(méi)有其他任務(wù) 使用CPU時(shí),調(diào)度器才會(huì)讓sleep task獲彳導(dǎo)CPU的使用權(quán)限,sleep task會(huì)根據(jù)當(dāng)前的任務(wù)調(diào)用狀 態(tài),決定CPU 是否可以進(jìn)入睡眠狀態(tài),如果判定當(dāng)前狀態(tài)可以進(jìn)入sleep狀態(tài),則通過(guò) sleep_power_down_and_halt

25、關(guān)閉主晶振 TCXO及其他LDO電源,以獲得省電效果。具體流程如if ( sleep_sigs != 0 ) deal some signalselsesleep_power_down_and_halt下圖所示:聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處26 -528535002.docSleep鑒權(quán):sleep_power_down_and_halt能否關(guān)閉 TCXO 及其他LDO電源,以獲得省電效果由sleep鑒權(quán)機(jī)制決定Sleep鑒權(quán)機(jī)制大體可以分為兩塊鑒權(quán)部分:1) sleep任務(wù)本身是否容許進(jìn)行睡眠2)是否有其他任務(wù)不容許進(jìn)行睡眠3.5.3 查Sleep電流方法.首先確保所有 task都可以進(jìn)slee

26、p.在 Sleep.c 里面添加代碼,把所有not_okts 的task從log打出來(lái),如果這時(shí)只有 SLEEP_DIAG_OKTS_SIG 和 SLEEP_USB_OKTS_SIG貝U正常.再把上面加的代碼去掉,用示波器測(cè)量 TCXO,看是否有周期性關(guān)閉.如果有則正常,沒(méi)有則需查 diag和usb task是否有問(wèn)題.在TCXO 關(guān)閉基礎(chǔ)上,查板子是否存在漏電.測(cè)量板上所有電阻兩端是否存在壓降;.把板子一些無(wú)關(guān)器件吹掉;測(cè)試PM輸出的幾個(gè)電壓值是否正常測(cè)試點(diǎn)slfep狀態(tài)(單位V)normal狀態(tài)(單位V)VREG_MSMP23KEG_MSMC1.2VREG MSMA2.3VREG_SYNT

27、0VTtEGTCXO方波(絕大部分處于零)2 8VREG_RFTX方波(絕大部分處于零)方波VTtEGRfRX方波絕大部分處于零)方波VREGMMCVREG_MSME213VREG_UIM328VREG_BT00VREG_5V55聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處27 -528535002.docSIOSIO模塊的架構(gòu)在高通平臺(tái),SIO模塊的整體架構(gòu)如下圖所示:sevice layerDIAGDATANMEAControl layerRDMDS3GSIOLIBDevice layerSIO interfaceSIO Device driverHWService layer主要實(shí)現(xiàn)相關(guān)服務(wù), 如DIAG、

28、DATA等等,Control layer主要負(fù)責(zé)設(shè)備與服務(wù)的管理, 并且加上相應(yīng)管理機(jī)制。 Device layer可以分為兩層,SIO Interface向上層提供統(tǒng)一的接口,隱藏 了硬件的相關(guān)操作。SIO Device driver 實(shí)現(xiàn)相關(guān)硬件驅(qū)動(dòng)。開(kāi)機(jī)時(shí),在 tmc_init 函數(shù)中,會(huì)依次調(diào)用 rdm_get_prev_port 及 rdm_issue_open 函數(shù), rdm_get_prev_ports()的作用在于讀取保存在efs中的設(shè)備映射表。在設(shè)備映射表中保存了上次斷電前的設(shè)備映射表。讀出設(shè)備映射表內(nèi)容將其放入到rdm_current_device_map RDM_DEV_

29、MAX 之聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處28 -528535002.doc中。 接著調(diào)用 rdm_issue_opens(),根據(jù)讀出的 rdm_current_device_map RDM_DEV_MAX 的內(nèi) 容,打開(kāi)相應(yīng)的 port。RDM的作用在于動(dòng)態(tài)的修改設(shè)備映射關(guān)系,那么在應(yīng)用中可以動(dòng)態(tài)修改設(shè)備映射關(guān)系。只要調(diào)用相關(guān)接口 rdm_assign_port 就可以。SIO數(shù)據(jù)處理流程在上一節(jié)介紹了高通平臺(tái)中SIO模塊的整體架構(gòu),但我們經(jīng)常涉及到其中一部分( device layer),通常也是修改這一部分。在這一節(jié)我們將詳細(xì)介紹SIO的數(shù)據(jù)處理流程。Application(Ibr examp

30、le, Data Services JSlQ I淅MSerial Deviw(UARTr USB, of similar device)Note: This could be a USB physical link, or any other appnooriate cableSIO數(shù)據(jù)接收:RX FIFO中如果有數(shù)據(jù),則會(huì)從DSM Pool中申請(qǐng)得到一個(gè) DSM item,然后將RX FIFO中的數(shù)據(jù)裝載到這個(gè) DSM item中,然后將這個(gè) DSM item入隊(duì)到又t應(yīng)的 watermark 中,watermark 在有新 的DSM item加入時(shí)會(huì)進(jìn)行監(jiān)測(cè),看數(shù)據(jù)是否達(dá)到要求以調(diào)用不同的

31、call back ,發(fā)出信號(hào)通知application來(lái)處理這些數(shù)據(jù)。當(dāng)然也可以直接通過(guò)回調(diào)函數(shù)rx fun直接處理DSM item。聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處29 -528535002.docSIO數(shù)據(jù)發(fā)送:數(shù)據(jù)發(fā)送前會(huì)先申請(qǐng)一個(gè) DSM item ,然后將要發(fā)送的數(shù)據(jù)填充到 dsm item中,如果TX FIFO 為空, 則直接將這個(gè) dsm item中的數(shù)據(jù)傳送到 TX FIFO中,如果TX FIFO不為空(發(fā)送器正忙),則將 這個(gè)dsm item 入隊(duì)到相應(yīng)的 water mark中,watermark會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑦@些數(shù)據(jù)發(fā)送到 TX FIFO重啟問(wèn)題分析萬(wàn)事皆有根源。重起及異常無(wú)

32、非就是軟件和硬件的原因;我們?cè)诜治龅倪^(guò)程中通常需要排除,定位。硬件上的異?,F(xiàn)象通常表現(xiàn)在:1電壓過(guò)低(或限流過(guò)低)2.程序跑飛,沒(méi)有規(guī)律(這通常是flash的原因,時(shí)序太緊了);等等這些原因用調(diào)試器,軟件的方法是沒(méi)法查找的,是一些經(jīng)驗(yàn)問(wèn)題,在驅(qū) 動(dòng)調(diào)試階段一般可以解決。還有就是軟件上的問(wèn)題,這些問(wèn)題我們一般都可以尋根溯源,在異常向量表的地方打斷點(diǎn),逐步嘗試,一般可以定位到:指令沒(méi)定義,指令預(yù)取異常,data abort ,或者就是reset。這些原因我們都可以根據(jù)r14的值來(lái)回溯,查找;這些方法技巧做嵌入式的軟件工程師都應(yīng)該有所了解,加以掌握。軟件狗檢測(cè)異常通常重起時(shí),我們跟蹤會(huì)在0地址打斷點(diǎn)

33、,然后由K據(jù)r14 (或者r144, r14 8)的值進(jìn)行回溯,一般可以找發(fā)生重起的地方,然后再分析原因。通常有兩種情況:就是dog task跑起來(lái)之前重起,通常是在初始化過(guò)程中沒(méi)有及時(shí)踢狗,這時(shí)要審查代碼在適當(dāng)?shù)牡胤剑ㄌ幚碣M(fèi)時(shí)的地方)加入硬件踢狗,多試幾處,通??梢越鉀Q問(wèn)題;就是dog task 跑進(jìn)之后重起,就是下面所描述的。在QSC60X5系列的平臺(tái)里面有一個(gè)優(yōu)先級(jí)最高的任務(wù)Dog task,它用來(lái)監(jiān)測(cè)其它task是否在正常運(yùn)行,如果某一任務(wù)陷入了死循環(huán),或者長(zhǎng)時(shí)間占有系統(tǒng)資源不釋放,導(dǎo)致其它任務(wù)不能及時(shí)的得到調(diào)度,這時(shí)候dog task會(huì)認(rèn)為當(dāng)前的任務(wù)調(diào)度出現(xiàn)了問(wèn)題,當(dāng)dog task

34、認(rèn)為在規(guī)定的時(shí)間之內(nèi)某一個(gè)task還沒(méi)有給自己做 dog_report()的動(dòng)作時(shí),它就認(rèn)為該任務(wù)已經(jīng)死了,所以dog task接下去會(huì)去調(diào)用: err_fatal_put_log ( 0,(char*)&(dog_task_infoloop_index.task)發(fā)生這種情況時(shí),我們需要先確認(rèn)是否真的是由于dog task檢測(cè)的原因?qū)е轮貑⒌?,通過(guò)調(diào)試器在spider上可以跟蹤。步驟如下:聯(lián)想移動(dòng)產(chǎn)品開(kāi)發(fā)部軟件處30 -nd gw1toi yiMy wrd riAb528535002.doc則聞lALsi一小40。&t4國(guó)上造酶包盤曼維日工比審R至41 z_J-J1D11i rloopiae

35、ifrK J, t iMsaut + c) NWtl -I dOiJ_T, ass_e ( lipOp_iPdeS jJJ-IidTrrH*l 工 3.h. hncrh rx.hLM1 .11他uh-rhiB. lHI0 SET LEXU BIO LED? ff );t* 5 BI e. r 1 ilv r 工 hmi* *Tli上百 vay TheKkk FAYkL Ewnt M 1J i,rlut I . 十 pf( Lnd: 1 ij-bC 1 nu itUI tiWu世,|il. UiCCi LllA Luk inax. a aFeglsCtr :-dirt ejnS.no Kl3 K

36、RlRfrR7C SX - CrhsHTir 1 nEGD7itUEGO93I _fM*l_jput_l&u I Dj i|QbMr*rjE tde4_UMk_liiX0E laop_lnlj&3(/ * er r_t at a 1_.? _ log 曰口亡: doc rexueu! */ * The eeiLOller dloeoB Icsdu cLac En.Fr4T1L d&ejiL t 工亡:,工t * * lellJi th 。崢1 ee: Chae 4 tail one oil iHe IL白。2 In 工辦工工 ,4 vhieh 占 m咨史當(dāng),: co opt ife i: EbeSer * not * EPJ3, TXTj/ bteaJ:;RO N9 MID RllAl 2 M3A14 FC CFStt1DS11 牌口 BW /find i Th ?r r*ci.U11l /ILVI ftUJkih U3I1QX 心口白KUtUOK IInff Jirmzj,-y士工 l .AL crdJM 5:J。淆4字?* z二邛” *卡。!回津” fbicaiti.! HEsupk / 里16

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論