聲明:本資料來自公司同事整理
SCCB:簡單說跟I2C是相同的一個協議。 SIO_C和SIO_D分別爲SCCB總線的時鐘線和數據線。SCCB控制總線功能的實現完全是依靠SIO_C、SIO_D兩條總線上電平的狀態以及兩者之間的相互配合實現的。其支持兩種地址形式:①從設備地址(ID Address,8bit),分爲讀地址和寫地址,高7位用於選中芯片, 第0位是讀/寫控制位(R/W),決定是對該芯片進行讀或寫操作;②內部寄存器單元地址(Sub_ Address,8bit),用於決定對內部的哪個寄存器單元進行操作,通常還支持地址單元連續的多字節順序讀寫操作。
DMA傳輸: DMA控制器獲得總線控制權後,CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀寫命令,直接控制RAM與I/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},
同過這個例子,可以看到按鍵事件的初始化過程存在着物理按鍵與邏輯按鍵的映射。