MTK平台 prelader的插入usb裝置開機慢

2021-10-02 21:53:06 字數 4867 閱讀 9498

(200217_10:02:42.868)

[bldr] seclib_brom_meta_mode:

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.868)step a2 : standard usb host!

(200217_10:02:42.868)

[plfm] usb cable in

(200217_10:02:42.868)usb hw reg: index14=0x0

(200217_10:02:42.868)

[usbd] usb full speed

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.868)hw_set_cc: 450

(200217_10:02:42.868)hw_set_cc: done

(200217_10:02:42.869)hw_set_cc: 450

(200217_10:02:42.869)hw_set_cc: done

(200217_10:02:42.869)hw_set_cc: 450

(200217_10:02:42.869)hw_set_cc: done

(200217_10:02:42.869)hw_set_cc: 450

(200217_10:02:42.869)hw_set_cc: done

(200217_10:02:42.869)hw_set_cc: 450

(200217_10:02:42.869)hw_set_cc: done

後來追蹤**(preloader源目錄下面)發現:

**路徑:platrom/***/src/core/main.c

**執行:main–>bldr_handshake()

**路徑:platrom/***/src/core/handshake_usb.c

**執行: bldr_handshake()–>usb_handshake()–>usb_cable_in()

bool usb_handshake

(struct bldr_command_handler *handler)

elseif(

!usb_cable_in()

)//如果有usb裝置插入則繼續往下走

#if cfg_usb_auto_detect

platform_usb_auto_detect_flow()

;#endif

usbdl_init()

;udelay

(1000);

usb_disconnect()

;//等待usb進行連線通訊if(

usb_connect

(enum_tmo)

== false)

udelay

(1000);

//如果連線成功,則進行usb通訊

if(false ==

usb_handshake_handler

(handler, handshake_tmo)

) result = true;

if(false ==

usb_port_down

(usb_port_down_time)

)end:

usb_service_offline()

;#if cfg_usbif_compliance

/* usb compliance test: 100ma charging current when usb is unconfigured. */

platform_set_chrg_cur(70

);#endif

return result;

}

int

usb_cable_in

(void

)else

if(ret == nonstandard_charger || ret == standard_charger)

#endif

}}return exist;

#else

int exist =0;

u8 u1_reg =0;

/* enable bg current, this ensure phy can work normal */

usbphy_clr8

(0x00

,0x20);

usbphy_set8

(0x00

,0x11);

/* set otg_vbustg = 1.445 v */

usbphy_set8

(0x06

,0x04);

/* set otg enable */

usbphy_set8

(0x1a

,0x10);

/*close vbus by gpio16 control vbat.*/

mt_set_gpio_mode

(gpio16, gpio_mode_00)

;mt_set_gpio_dir

(gpio16, gpio_dir_out)

;mt_set_gpio_pull_enable

(gpio16, gpio_pull_enable)

;mt_set_gpio_pull_select

(gpio16, gpio_pull_up)

;mdelay

(100);

/* read vbusvalid bit, when input vbus 5v, phy will modify this bit.*/

u1_reg =

usb_readb

(0x630);

if((u1_reg &

=0x10)==

0x10)if

(exist)

return exist;

#endif

}

從上面的**看出

**執行: usb_cable_in–>if((g_boot_reason == br_usb) || usb_accessory_in())–>mt_charger_type_detection

usb_accessory_in–>if(pmic_chrdet_exist == pmic_isusbcablein())//檢測usb插入。

原始碼路徑:preloader/platform/ac8227l/src/drivers/pmic_6323.c

**執行:mt_charger_type_detection-->hw_charger_type_detection–>hw_charger_type_detection–>

else(1hw_bc11_dcd())–>else(1hw_bc11_stepa2())—>upmu_get_rgs_bc11_cmp_out—>

pmic_read_inte***ce//獲取充電型別

usb等待連線:傳進來的引數u32 tmo是連線的超時時間

**路徑:platrom/***/src/core/handshake_usb.c

static bool usb_connect

(u32 tmo)

if(tmo)

i++;#endif

}#endif

}}while(1

);print

("%s enumeration(end): %s %dms \n"

, mod, result == true ?

"ok"

:"tmo"

,get_timer

(start_time));

return result;

從上面的**看出,usb連線過程中如果連線成功就馬上退出,否則就不斷等待usb連線,等待超過時間tmo就跳出等待。從上面的**看出tmo的時間來自usb_enum_timeout,

uint32 enum_tmo = cfg_usb_enum_timeout_en ? usb_enum_timeout :0;

//獲取usb連線超時時間

usb_enum_timeout在**:platform/ac8227l/src/drivers/inc/platform.h中定義。

#define cfg_usb_enum_timeout            (8000)           

/* 8000ms */

因此這就能解析為何會插入異常usb裝置後,usb裝置錯誤的被當做充電裝置,然後進行在usb連線的時候一直沒有連線成功,等待超時時間超過8秒後直接退出。這就造成了開機延遲了很久。

直接把超時時間改為2秒

#define cfg_usb_enum_timeout (2000) /* 2000ms */

MTK平台搭建

mtk平台搭建 最近公司的專案差不多都做完了,趁新專案還沒來的時候學學東西。從朋友那裡搞來一套 mtk的源 學學 mtk的開發。選擇 mtk是因為,它跟我的工作所用的平台相似,學起來方便一點,另外一點是它可以在 pc上跑,不用自己去買硬體,成本不高。呵呵,從朋友那裡搞來的源 不用硬體,成本就只有時間...

MTK平台入門

mtk平台入門 通過 new,update,remake,clean all,clean modules,codegen.來動作生成bin file 二進字檔案 類如 假設專案是gsm專案,專案名稱為m720,則有這些命令 make custom m720 gsm resgen 修改了資源時用這個命...

MTK 平台搭建

首先要安裝編譯器ads v1.2,安裝目錄為c program files arm,版本應該是842以上版,如果版本不夠,需要將公升級的軟體包解壓,拷貝到c program files arm adsv1 2的目錄下,注意壓縮的7z工具要安裝442版本。然後需要安裝perl的編譯器,推薦安裝acti...