P1調試出現問題解析

 聲明:本資料來自公司同事整理

       SCCB:簡單說I2C是相同的一個協議。 SIO_CSIO_D分別爲SCCB總線的時鐘線和數據線。SCCB控制總線功能的實現完全是依靠SIO_CSIO_D兩條總線上電平的狀態以及兩者之間的相互配合實現的。其支持兩種地址形式:從設備地址(ID Address8bit),分爲讀地址和寫地址,高7位用於選中芯片, 0位是讀/寫控制位(R/W),決定是對該芯片進行讀或寫操作;內部寄存器單元地址(Sub_ Address8bit),用於決定對內部的哪個寄存器單元進行操作,通常還支持地址單元連續的多字節順序讀寫操作。

 

       DMA傳輸: DMA控制器獲得總線控制權後,CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀寫命令,直接控制RAMI/O接口進行DMA傳輸。所以DMA傳輸的延時要小。

 

1.如果遇到SCCB通信不正常,可以看一下這一點建議

 

       具體的例子,位於sccb.h

 

#elif defined(MT6253T) || defined(MT6253)

   #ifdef __CUST_NEW__

   #define SCCB_SERIAL_CLK_PIN          28  //(24|GPIO_MAGIC_NUM)

   #define SCCB_SERIAL_DATA_PIN        27   //(25|GPIO_MAGIC_NUM)

   #else /* __CUST_NEW__ */

  …

建議改爲

#elif defined(MT6253T) || defined(MT6253)

   #ifdef __CUST_NEW__

   #define SCCB_SERIAL_CLK_PIN          gpio_sccb_serial_clk_pin  //28  //(24|GPIO_MAGIC_NUM)

   #define SCCB_SERIAL_DATA_PIN                 gpio_sccb_serial_data_pin //27   //(25|GPIO_MAGIC_NUM)

   #else /* __CUST_NEW__ */

 

其中SCCB_SERIAL_CLK_PIN  爲時鐘線,SCCB_SERIAL_DATA_PIN  爲數據線。通過其對應的gpio進行電平高低配置來修改所需的地址。

 

這樣方便統一管理引腳配置,MTK定義__CUST_NEW__就是方便配置,否則要花時間到處這個定義。

 

2. 如果遇到屏無法正常顯示,大家可以看一下這一點建議

 

lcd.c文件中對lcd的寄存器進行配置時都採用了dma傳送數據

  現在lcd.c中存在如下代碼

例如

                   #define LCD_CtrlWrite_ILI9325DS(_data) /

                   {/

                            SET_LCD_CMD_PARAMETER(0,LCD_CMD,((_data & 0xFF00)>>8));/

                            SET_LCD_CMD_PARAMETER(1,LCD_CMD,(_data & 0xFF));/

                            LCD_SEND_DMA_CMD(2);/

                   }/

SET_LCD_CMD_PARAMETER(0,LCD_CMD, (0x0050&0xFF00));//0x0050 startx的寄存器

         SET_LCD_CMD_PARAMETER(1,LCD_CMD, (0x0050 & 0xFF));

         SET_LCD_ROI_CTRL_NUMBER_OF_CMD(26);

 

這樣做的好處是快速配置lcd, 更節省時間,但是有一定的弊端:有些屏無法接受如此快的設置,導致無法正常顯示。

解決的方法有兩個:

方法1:在init_lcd_interface降低lcd讀寫時序,將延遲加大

方法2.:在配置lcd寄存器時不採用dma傳送方式,而採用一般的讀寫方式,例如如下定義

#define LCD_CtrlWrite_General(_data)  /

                   {/

                            *(volatile kal_uint8 *) MAIN_LCD_CMD_ADDR= ((_data & 0xFF00)>>8);/

                            *(volatile kal_uint8 *) MAIN_LCD_CMD_ADDR= (_data & 0xFF);/

                            LCD_Drv_delay();/

                   }/

#define  LCD_set_reg_General(reg_index, reg_data) /

{ /

    LCD_CtrlWrite_General(reg_index); /

    LCD_DataWrite_General(reg_data);/

}

雖然方法2會稍微慢一點,但是配置寄存器所佔時間畢竟不是很長,影響不大,如果降低dma讀寫時序,對整個刷屏的時間會有一定的影響。

 

 

 

 

 

 

3. 如果發現camera鍵已經利用Drv_Tool目錄下的DrvGen.exe配置了,但是按camera鍵還是沒有任何反應,可以參考此點

KeyBrd.c const static key_code_map_struct g_key_code_map[]中添加如下一行

     {DEVICE_KEY_CAMERA,      KEY_CAMERA},

 

同過這個例子,可以看到按鍵事件的初始化過程存在着物理按鍵與邏輯按鍵的映射。

發佈了55 篇原創文章 · 獲贊 4 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章