MTK手機驅動培訓資料

2021-05-24 23:20:25 字數 3484 閱讀 1617

1、lcd的除錯:

一般lcd廠商在提供樣品的時候,都會提供給初始化**,服務更好的還會提供進入和退出sleep的**,如果廠商不提供的話,就只有看著文件自己寫了。我們的工作一般是調節顯示效果以及和廠商溝通,還有就是把廠商給的**整合程序式裡面去。

lcd驅動程式相關的檔案主要包括lcd.c,lcd_sw.h以及lcd_sw_inc.h。

調節lcd的驅動程式,最先要在lcd_sw_inc.h中修改lcd的尺寸,就是lcd_width和lcd_height,如果有小屏的話還要定義下面的小屏的lcd的尺寸。

然後,根據硬體的設計修改lcd_sw.h中的巨集,來確定lcd是使用8位的還是16位的介面,比如使用16位的lcd介面,就定義巨集main_lcd_16bit_mode。

最後,移植廠商給的初始化**進入到初始化函式裡,還有進入和退出sleep狀態。進入和退出sleep狀態要求重新進入sleep狀態後螢幕能正常的顯示,退出sleep狀態要求lcd的耗電小於0.1ma。

如果是cstn的螢幕,那麼還有乙個對比度的引數需要設定。有2個對比度的值,乙個是在初始化函式中寫進去的乙個值,還有乙個是在nvram_user_config.c中的結構nvram_ef_cust_hw_level_tbl_default中定義。

2、gpio的設定:

gpio就是general purpose io pin的意思,是一些能用做一般的功能控制的io引腳。mtk晶元的引腳一般有四個功能選項,可以通過暫存器來控制各個引腳的功能,一般功能0就是表示這個引腳用做gpio。

用函式   void gpio_modesetup(kal_uint16 pin, kal_uint16 conf_dada)來控制gpio的功能,pin表示引腳號,conf_dada控制引腳的功能。

用函式void gpio_initio(char direction, char port)控制gpio的方向,port表示引腳號,direction表示是輸入還是輸出。

用函式void gpo_writeio(char data,char port)控制gpio的輸出值,port表示引腳號,data表示輸出的是高電平還是低電平。

在檔案custom_equipment.c中有乙個結構gpio_map_entry gpio_map_tbl,其中定義了控制震動的gpio,應該根據原理圖來更改第4項震動的gpio的設定。

3、訊號量的控制:

訊號量指的是在手機訊號的強弱。通過修改simdetectiondef.h中的signal_strength_none到signal_strength_level4的值來修改在不同訊號下手機顯示的訊號格數。預設滿格訊號顯示是4格,如果是其他的,比如5格的話,還要修改程式networkfunctions.c中的函式void networksignallevelindication(void *inmsg)。

4、電池格數的控制:

在bb中有乙個ad轉換的部件,每隔一定時間取樣電池的電壓,來控制電池顯示的格數。具體在什麼電壓顯示幾格在檔案nvram_user_config.c中的結構nvram_ef_cust_hw_level_tbl_default中定義。計算的演算法在custom_equipment.c中的kal_uint8 custom_cfg_vbat_level_regulator( kal_uint32 measure_voltage, kal_uint8 *last_level, kal_uint8 *disp_level, kal_uint8 *hit_count )中。

5、lcd背光的控制:

一般lcd的背光是通過控制pwm1的占空比來實現,背光的級別一般有5級,在每一級別的占空比是由custom_hw_default.c檔案中的kal_uint32 pwm1_level_info[pwm_max_level][2] 來控制,控制的實現在pwm.c中的函式void pwm_level(kal_uint8 level)中。

6、鍵盤背光的控制

鍵盤的背光由pwm2來控制,一般很少改動。鍵盤的背光是否亮起來可以作為判斷乙個機器是否開機的乙個標誌,一般板子做好後,只要cpu和flash以及pmic連好後就可以正常開機了,這時lcd可能沒顯示,可是鍵盤燈一定會亮的。

7、usb和充電器的區分:

一般在mtk平台下usb和充電器是提供一樣的電源,使用同乙個介面,判斷是否是usb還是充電器是通過判斷usb的d+線上是否為低來判斷的,因為在計算機上這根線是被拉低的,如果插入的是usb,這個線就會被拉低,如果插入的是充電器,因為充電器沒有接這個線,所有它被手機內部的乙個很大的電阻給拉高,通過檢測這個線上的電壓就可以判斷插入的是usb還是充電器,具體的判斷的演算法在bmt_main.c檔案中的static void check_charger_or_usb(kal_uint8 sche_id)中。

8、鍵盤的定義:

在檔案keypad_def.c中根據原理圖修改陣列const keypad_struct

keypad_custom_def就可以了。

9、音訊引數的修改:

根據硬體提供的用儀器測出來的值修改nvram_default_audio.c中的巨集定義值。

10、外部中斷的設定:

在檔案eint_def.c中修改所使用的外部中斷的號,比如usb_eint_no等。

11、待機電流控制:

一般要求手機的待機電流小於3ma,最小電流小於1ma,好的情況下能做到小於0.5ma,關機電流小於0.1ma。關機電流大一般是純硬體問題,因為這時bb已經沒有電了,軟體完全不工作。待機電流大一般是lcd沒有進入休眠、image sensor沒有進入休眠或者cpu沒有進入休眠。cpu沒有進入休眠一般是一直有個程式在工作,比如乙個定時器一直工作或者一直來乙個中斷訊號等。

12、image sensor的控制:

一般選用mtk推薦的image sensor的型號,這樣在make檔案中定義了型號以後就直接可以用了,需要注意的是i2c匯流排的定義,在sccb.h中定義,修改sccb_serial_clk_pin和sccb_serial_data_pin的值到現在所用的gpio引腳,如果有多個i2c的裝置的話就得修改程式了,預設的只支援乙個i2c裝置。image sensor的的驅動程式在image_sensor.c中。

13、fm晶元的控制:

一般選用mtk提供的fm晶元,在這樣在make檔案中定義了型號以後就直接可以用了。這裡也需要注意i2c匯流排的定義。

14、手機開機過程:

15、flash晶元的設定:

根據硬體原理圖,確定所使用的晶元的型號,然後到tools/memorydevicelist目錄下,找到裡面的excel檔案,找到對應的flash的型號,在region欄下修改所需要的nvram的空間,這個欄目下的格式一般是類似於的形式,每個大括號中的前乙個表示的是塊的大小,後乙個表示的是塊的數量。在flash的文件中有塊的分布的介紹,注意nvram不能跨越bank。

然後設定custom_memorydevice.h檔案中的cs0_part_number為對應的flash型號,要注意的是這裡的flash的型號需要和excel檔案中的flash型號完全一致。

16、一點體會:

在除錯程式的時候,要注意不要假設bb晶元的動作,只要不是文擋中明確說明的都是不確定的,晶元內部還有一定的漏電的情況,沒有加電的模組也是有一點電壓的。

mtk手機線刷

mtk手機線刷 mtk手機刷機一般都是使用smart phone flash tool,以我的mt6582為例,其刷機的介面如下圖1所示 刷機流程如下圖2所示 preloader 核心在啟動前的那一段平台相關的初始化 統稱為bootloader,在mtk平台,preloader和lk分別是bootl...

MTK手機獲取imsi號

簡介 獲取sim卡的imsi碼 sim卡唯一標識 imsi 國際移動使用者識別碼 imsi international mobile subscriber identification number 是區別移動使用者的標誌,儲存在sim卡中,可用於區別移動使用者的有效資訊。imsi由mcc mnc ...

MTK平台手機adb問題

問題描述 客戶端程式連線外接的平板,由於用的adb工具通訊的,在客戶電腦上無法通訊 mtk平台的驅動與高通和海思的驅動不能通用,即在安裝了高通驅動的電腦上再安裝mtk的驅動會安裝失敗 adb工具配置好了還是無法使用adb命令 使用adb shell 不能正常執行,使用360手機助手可以看到手機和手機...