基於飛思卡爾i.MX 6Quad Sabrelite開發板的觸控式螢幕除錯
1 概述
本次任務是在飛思卡爾i.MX 6Quqd Sabrelite開發板上除錯觸屏驅動,觸屏晶片是Goodix的gt828晶片,觸屏介面是I2C。
作業系統:android 4.0.4
核心版本:3.0.15
2 除錯步驟
2.1 硬體連線
2.1.1 開發板硬體介面
開發板已提供獨立的介面用於觸屏,其示意圖如下:
它提供了一組I2C,電源、地和一個GPIO口。
2.1.2 GT828硬體介面
觸屏晶片GT828的硬體介面如下:
其中INT是中斷腳,RESET是復位腳,另一個需要注意的是晶片電壓是3.3V。
2.1.3 連線
熟悉了開發板和晶片的硬體介面後,下一步就是要把他們連線起來。
1) 首先是電源腳,因開發板觸屏介面的電源是5V,而晶片電壓是3.3V,所以要另找3.3V的電源跟晶片接上。
2) 連線I2C管腳,開發板的I2C本身已有4.7K的上拉電阻,所以不用再外接上拉電阻。
3) 把開發板的GPIO_9連到晶片的INT腳,用於控制中斷。
4) 晶片的RESET需要一個GPIO來控制,但開發板的觸屏介面的GPIO腳只有一個GPIO_9,所以另找一個GPIO腳來控制RESET。
連線方式如下:
1 VCC33 => 3.3V
2 GND => 接地
3 SDA => 6 I2C3_SDA
4 SCL => 5 I2C3_SCL
5 INT => 4 GPIO9
6 RESET => DISP0_CONTRAST
注:INT腳和RESET腳不用再外接上拉電阻。
2.2 驅動修改
1、 把廠家提供的驅動檔案gt813_827_828.c和gt813_827_828.h檔案放到核心目錄Kernel_imx/drivers/input/touchscreen
2、 修改gt813_827_828.h標頭檔案。
1) 修改巨集開關:
#defineGTP_CHANGE_X2Y 1 //x,y座標互換
#defineGTP_CREATE_WR_NODE 0 //不進行線上升級要設為0,否則編譯不通過
#defineGTP_ICS_SLOT_REPORT 1 //android 4.0配置成slot方式上報座標
2) 修改INT和RESET管腳定義
#define GTP_RST_PORT MX6Q_SABRELITE_TP_RST
#define GTP_INT_PORT MX6Q_SABRELITE_CAP_TCH_INT1
其中MX6Q_SABRELITE_TP_RST 和MX6Q_SABRELITE_CAP_TCH_INT1定義在arch/arm/plat-mxc/include/mach/sabrelite.h檔案中:
#define MX6Q_SABRELITE_TP_RST IMX_GPIO_NR(2,0)
#define MX6Q_SABRELITE_CAP_TCH_INT1 IMX_GPIO_NR(1, 9)
這兩個管腳的定義是怎麼樣來的呢?參考硬體連線:
5 INT => 4 GPIO9
6 RESET => DISP0_CONTRAST
首先看INT腳,連到CPU的GPIO9,我們在i.MX 6Quad的datasheet上搜索GPIO_9,找到IOMUXC_SW_MUX_CTL_PAD_GPIO09,它的MUX_MODE描述為:
MUX Mode Select Field.
Select 1 of 7 iomux modes to beused for pad: GPIO_9.
NOTE: Pad GPIO_9 is involved inDaisy Chain.
000 ALT0 — Select signalESAI_RX_FS.
- Configure registerIOMUXC_ESAI_RX_FS_SELECT_INPUT for mode ALT0.
001 ALT1 — Select signalWDOG1_B.
010 ALT2 — Select signalKEY_COL6.
- Configure registerIOMUXC_KEY_COL6_SELECT_INPUT for mode ALT2.
011 ALT3 — Select signalCCM_REF_EN_B.
100 ALT4 — Select signalPWM1_OUT.
101 ALT5 — Select signalGPIO1_IO09.
110 ALT6 — Select signal SD1_WP.
- Configureregister IOMUXC_USDHC1_WP_ON_SELECT_INPUT for mode ALT6.
ALT5模式為GPIO1_IO09,所以配置為IMX_GPIO_NR(1, 9),同理RESET腳配置為IMX_GPIO_NR(2, 0)。
3) 修改解析度:
#ifGTP_CUSTOM_CFG
#define GTP_MAX_HEIGHT 800
#define GTP_MAX_WIDTH 480
#define GTP_INT_TRIGGER 1 //0:Falling 1:Rising
#else
//螢幕的解析度
#define GTP_MAX_HEIGHT 6400
#define GTP_MAX_WIDTH 9600
#define GTP_INT_TRIGGER 1
#endif
4) 修改其他巨集定義:
//#defineGTP_INT_CFG S3C_GPIO_SFN(0xF) //註釋掉
#defineGTP_GPIO_AS_INPUT(pin) do{\
gpio_direction_input(pin);\
}while(0)
#defineGTP_GPIO_AS_INT(pin) do{\
gpio_direction_input(pin);\
}while(0)
3、 配置I2C資訊
在arch/arm/mach-mx6/board-ma6q_sabrelite.c中找到mxc_i2c2_board_info,在裡面新增:
I2C_BOARD_INFO("Goodix-TS",0x5d),
修改完成後,像這樣:
staticstruct i2c_board_info mxc_i2c2_board_info[] __initdata = {
{
I2C_BOARD_INFO("egalax_ts",0x4),
.irq =gpio_to_irq(MX6Q_SABRELITE_CAP_TCH_INT1),
},
{
I2C_BOARD_INFO("Goodix-TS",0x5d),
},
};
再配置i2c速率為400kb:
static struct imxi2c_platform_data mx6q_sabrelite_i2c_data = {
.bitrate = 400000,
};
4、 編譯。
1) 在touchcreen目錄下的Makefile中新增:
obj-$(CONFIG_TOUCHSCREEN_GT828) += gt813_827_828.o
2) 在同目錄下的Kconfig檔案中新增以下內容:
configTOUCHSCREEN_GT828
tristate "GT828 touchscreen driver"
depends on I2C
help
Say Yhere to support GT828/813/827 touchscreen.
Tocompile this driver as a module, choose M here: the
module will be called gt828_ts
3) 配置menuconfig
在kenel目錄下執行:make menuconfig
進入配置介面,把gt828的驅動的開關開啟,示意如下:
Device Drivers ->
Input device support ->
Touchscreens->
<*>GT828 touchscreen driver
4) 在kenel目錄下執行make uImage進行編譯,編譯成功後生成uImage檔案,緊接著在android原始碼目錄下執行make bootimage生成boot.img檔案
5) 把boot.img檔案燒錄到tf卡中,啟動系統。
3 軟體除錯
1、 啟動系統後,發現系統的串列埠列印有問題,只能用adb登陸後用dmesg命令檢視核心訊息,發現核心一直輸出這樣的log:
GTP-ERROR->>[339][email protected] transfer error.errno:-110
表示i2c通訊有問題,檢查了一下管腳,發現i2c的SDA和SCL互相調換了,再重新焊接,把sda和scl接好。
2、 重新啟動系統,發現i2c仍然不能通訊,log如下:
<4><<-GTP-INFO->>[362]Datanot ready!
<4><<-GTP-INFO->>[362]Datanot ready!
<4><<-GTP-INFO->>[362]Datanot ready!
<4><<-GTP-INFO->>[362]Datanot ready!
這個錯誤是在觸屏驅動的終端函式中產生的。繼續檢視log,返現dmesg的輸出沒有包含gt828驅動初始化函式的列印,因gt828的初始化函式會列印如下資訊:
[ 4.192103] <<-GTP-FUNC->>[1108]Func:goodix_ts_probe
[ 4.197196] <<-GTP-DEBUG->>[1110]I2C addr:5d
[ 4.201501] <<-GTP-INFO->>[1113]GTP DriverVersion:V1.2<2012/06/08>
…
我懷疑是dmesg列印不完全,那麼要看完整的核心log只能把開發板的串列埠輸出問題解決了。
3、 經過無數次嘗試,終於把開發板的串列埠輸出問題解決,解決方法是修改u-boot的串列埠輸出埠為ttymxc1,原來的埠是ttymxc0。
4、 重新啟動系統,檢視串列埠列印log,發現gt828的驅動初始化資訊仍然沒出來。經過數次嘗試,發現在gt828的驅動載入函式把late_initcall修改為module_init即可,修改如下:
module(goodix_ts_init);
module_exit(goodix_ts_exit);
修改後,編譯、啟動系統,發現驅動初始化log如下:
<<-GTP-INFO->>[1278]GTPdriver install.
<<-GTP-DEBUG->>[973]I2Caddr:5d
<<-GTP-INFO->>[976]GTPDriver Version:V1.2<2012/06/08>
<<-GTP-INFO->>[977]GTPDriver [email protected]:21:04,Jun 18 2013
<<-GTP-DEBUG->>[637]len1=112,len2=0,len3=0
<<-GTP-DEBUG->>[655]SENSORID:0
<<-GTP-DEBUG->>[706]X_MAX= 800,Y_MAX = 1280,TRIGGER = 0x00
<<-GTP-DEBUG->>[837]INTtrigger type:0
<<-GTP-INFO->>[1046]GTPworks in interrupt mode.
<<-GTP-INFO->>[741]ICVERSION:00_0000
i2c-core: driver [isl29023] usinglegacy suspend method
i2c-core: driver [isl29023] usinglegacy resume method
<<-GTP-INFO->>[362]Datanot ready!
<<-GTP-INFO->>[362]Datanot ready!
<<-GTP-INFO->>[362]Datanot ready!
<<-GTP-INFO->>[362]Datanot ready!
<<-GTP-INFO->>[362]Datanot ready!
從IC VERSION:00_0000可以判斷i2c通訊不正常。
於是再次檢查軟體、硬體,經過n此嘗試,確定軟體是沒問題的,硬體的RST、INT腳也工作正常,剩下的就可能是i2c硬體問題了。
果斷換一個i2c口,把原來的i2c3改為i2c2。硬體改好後,在board-ma6q_sabrelite.c中找到mxc_i2c1_board_info,在裡面新增:
I2C_BOARD_INFO("Goodix-TS",0x5d),
重新編譯、燒錄系統。
5、 啟動系統後發現log正常,觸屏工作正常,大功告成!
相關推薦
基於飛思卡爾i.MX 6Quad Sabrelite開發板的觸控式螢幕除錯
1 概述 本次任務是在飛思卡爾i.MX 6Quqd Sabrelite開發板上除錯觸屏驅動,觸屏晶片是Goodix的gt828晶片,觸屏介面是I2C。 作業系統:android 4.0.4 核心版本:3.0.15 2 除錯步驟 2.1 硬體
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器啟動篇(2)- Boot配置(BOOT_CFG Pin/eFUSE)
TP 執行 不同 mcu 更新 oom als 配置 示例 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Boot配置。 在上一篇文章 飛思卡爾i.MX RT系列微控制器啟動篇(1)- Boot簡介 裏痞子衡為大
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器介紹篇(3)- 命名規則
rule 成員 oom 嵌入 信息 100% 規則 控制器 今天 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的命名規則。 打開任何一款i.MX RT系列芯片的Data Sheet均可找到如下命名規則表,以i.M
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器啟動篇(3)- Serial Downloader模式(sdphost/mfgtool)
efi RM pda lock mman www. esc https conn 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Serial Downloader模式。 在上一篇文章 飛思卡爾i.MX RT系列微
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器啟動篇(6)- Bootable image格式與加載(elftosb/.bd/.bin)
before 詳細介紹 tab true 加載完成 table sdp 推薦 包含 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Bootable image格式與加載過程。 在i.MXRT啟動系列第三篇文章 飛
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器啟動篇(9)- 從Parallel NOR啟動
16bit erase section cloud 你會 命令執行 選型 兩個 寬度 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Parallel NOR啟動。 上一篇講i.MXRT從Raw NAND啟動的文章
痞子衡嵌入式:飛思卡爾i.MX RT系列微控制器啟動篇(13)- 從Serial(1-bit SPI) EEPROM/NOR恢復啟動
如何 use pin 訪問 fill normal loader 擔心 飛思卡爾 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RT系列MCU的Serial EEPROM/NOR恢復啟動。 在前幾篇裏痞子衡介紹的Boot Dev
痞子衡嵌入式:飛思卡爾i.MX RTxxx系列MCU開發那些事 - 索引
持續更新 技術 紀元 dsp cad rtx 相關 面向 tro 大家好,我是痞子衡,是正經搞技術的痞子。本系列痞子衡給大家介紹的是恩智浦i.MX RTxxx系列微控制器相關知識。 恩智浦半導體於2018年10月發布的i.MX RTxxx系列開啟了ML/AI MC
痞子衡嵌入式:飛思卡爾i.MX RTyyyy系列MCU硬體那些事(2.1)- 玩轉板載OpenSDA,Freelink偵錯程式
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RTyyyy系列EVK上板載偵錯程式的用法。 本文是i.MXRT硬體那些事系列第二篇,第一篇痞子衡給大家整體介紹了i.MXRT官方EVK,從本文開始痞子衡將細聊EVK上的元件,今天要講的是一個非常經典而且常用的元件 -
痞子衡嵌入式:飛思卡爾i.MX RTyyyy系列MCU硬體那些事(2.2)- 在序列NOR Flash XIP除錯原理
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RTyyyy系列EVK在序列NOR Flash除錯的原理。 本文是i.MXRT硬體那些事系列第二篇的續集,在第二篇首集中痞子衡給大家詳細介紹了EVK板載偵錯程式用法,有了偵錯程式在手,從此除錯不用愁。從除錯程式碼所在目
痞子衡嵌入式:飛思卡爾i.MX RTyyyy系列MCU外設那些事(2)- 善變的FlexRAM
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是飛思卡爾i.MX RTyyyy系列MCU的FlexRAM外設。 本文是外設系列第二篇,上一篇講的是離核心最近的快取記憶體L1 Cache,今天咱們聊離核心第二近的靜態記憶體SRAM。眾所周知,i.MXRT系列內部沒有非易失性儲存器,但內
產品研發ARM開發板如何選擇?飛思卡爾I.MX6Q開發板
pow 清分 工作 images logs 時鐘 網通 https 處理器 處理器:迅為-i.MX6開發板恩智浦Cortex-A9 四核i.MX6Q處理器,主頻1GHz,內存2G,存儲16GB。 系統支持:i.MX6開發板系統支持LINUX,Android,Ubuntu系統
[原創] 我也來講ModBus移植,基於飛思卡爾 K60,中斷接收,中斷髮送
題外話,用K60,其實我是抵觸的,哪有STM32用的舒服,客戶就要汽車級MCU,那就上吧,就是多花點時間唄。移植下來,收穫還很多,記錄下來,或許將來有小夥伴用得上: 在移植MB之前,先理一理MB的實現機理: 首先是三個函式: 1. eMBInit() eMBEnable() 和
基於飛思卡爾imxsolosabresd開發板Linux-3.10.53 lvds螢幕除錯
BSP是Linux-3.10.53,在這個版本中引入了devicetree,所以一些關於硬體的配置都被剝離到dts中了,與3.0的版本有較大的改變,下面我們具體來看一下: imxsolo燒寫的時候,需要的是imx6dl-sabresd.dtb檔案,對應的原始碼
迅為i.MX6UL核心板ARMCortex-A7單核NXP飛思卡爾工控行業Imx6核心板
迅為iMX6UL核心板小巧精緻,尺寸僅38mm*42mm;CPU型號[email protected] 528MHz ARM Cortex-A7架構 ;記憶體:512M DDR ;儲存:8G EMMC,低功耗,效能強大,價效比高。 IMX6UL核心板引數
基於飛思卡爾imx6 sabrelite開發板的android lvds螢幕驅動除錯
一、概述 1、 飛思卡爾 imx6的顯示屏驅動架構: 2、目標: 因sabrelite開發板本身已提供LVDS介面,目標螢幕是LG的LP101WX1-SLN2,其主要引數為: 解析度:1280*800 色彩:18位 色彩數:262K 時鐘頻
飛思卡爾S12系列(基於MC9S12XET256MAA和/MC9S12XEP100)CAN初始化總結和分享
CAN初始化流程: 1.查詢是否進入初始化狀態,如不是,進入初始化狀態,此處需設定CANCTL0,CANCTL1暫存器 3.關閉相應CAN口濾波器,此處需設定CANIDMR暫存器。 4.使能MSCAN模組,進入一般模式,選擇時鐘,此處需設定CANCTL0,C
飛思卡爾的i.mx6dl開發板上實現nfs網路檔案系統掛載操作指南
問題描述:在MCIMX6DL_SDP上實現網路檔案掛載,要求從emmc中啟動uboot和kernel,從網路上掛載根檔案系統。 操作平臺: host :Ubuntu14.04LTS board:
飛思卡爾MC9S12系列單片機地址影射以及分頁問題
flash 方式 優先 獲得 機制 再看 這就是 範圍 基本上 對於用MCU的人來說,不一定要明白HCS12(x) memory map的機制和聯系。因為如果沒有系統地學習操作系統和編譯原理之類的課程,確實有些難度。並且,對於DG128 XS128這樣的MCU,默認的e
恩智浦iMX6Q核心板/飛思卡爾Cortex-A9高穩定性低功耗開發板
iMX6Q核心板-商業級 iMX6Q-Plus核心板 iMX6DL核心板-商業級 iMX6Q核心板-工業級 &nbs