企業(yè)建站多站點管理系統(tǒng)惠州seo排名公司
【 聲明:版權(quán)所有,歡迎轉(zhuǎn)載,請勿用于商業(yè)用途。 聯(lián)系信箱:feixiaoxing @163.com】
? ? ? ? 所謂的觸摸屏,其實就是在普通的lcd屏幕之上,再加一層屏而已。這個屏是透明的,這樣客戶就可以看到下面lcd屏幕的內(nèi)容,另外一方面,通過觸摸信號,還可以實現(xiàn)人和機器的自然交互,這是一種非常好的體驗形式。像早期的按鍵手機,大家用著其實還行,只不過后來轉(zhuǎn)成智能手機,只剩下一個屏幕之后,就一股腦全轉(zhuǎn)成觸摸屏手機了。
1、查看lcd電路圖
? ? ? ? ?之前我們說過這個lcd 40 pin的原理圖。上次分析的時候,賣了一個關(guān)子。就是這個TPX1、TPY1、TPX2、TPY2,四根信號線。這四根線并沒有直接連接到soc上面,而是先連接到ns2009,然后再通過i2c的形式連接到soc上面。
? ? ? ? ?簡單瀏覽下,發(fā)現(xiàn)TP信號連接到了2、3、4、5號pin上面,soc需要獲取觸摸信息的話,通過SCK & SDA就可以,當然這里還有一個PENIRQ,理論上是可以通過中斷的形式獲取觸摸信息的。但是,實際看linux驅(qū)動代碼的話,發(fā)現(xiàn)還是定時輪詢的形式。
? ? ? ? 此外選擇lcd屏幕的時候,一定要選擇帶有觸摸屏的那種,千萬要和商家溝通清楚。不然白白浪費了自己的時間。
2、設(shè)備樹
? ? ? ? 上面分析電路得出結(jié)論,soc是通過i2c獲取按鍵信息的,那么可以直接查找sun8i-v3s-licheepi-zero.dts,
&i2c0 {status = "okay";ns2009: ns2009@48 {compatible = "nsiway,ns2009";reg = <0x48>;};
};
? ? ? ? 引腳信息可以在sun8i-v3s.dtsi查找到,分別是PB6、PB7
i2c0_pins: i2c0 {pins = "PB6", "PB7";function = "i2c0";};
? ? ? ? 更詳細的寄存器、中斷、時鐘信息也可以在這個文件的后半部分找到,
i2c0: i2c@01c2ac00 {compatible = "allwinner,sun6i-a31-i2c";reg = <0x01c2ac00 0x400>;interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;clocks = <&ccu CLK_BUS_I2C0>;resets = <&ccu RST_BUS_I2C0>;pinctrl-names = "default";pinctrl-0 = <&i2c0_pins>;status = "disabled";#address-cells = <1>;#size-cells = <0>;};
? ? ? ? 上面說的這些內(nèi)容都是默認配置好的,只要是linux 4.14.y內(nèi)核,就不需要自己再動手配置一遍了。
3、查看驅(qū)動代碼
? ? ? ? 因為這里使用到了i2c協(xié)議,也使用到了ns2009芯片,所以只需要在drivers/input/touchscreen下面查找下,有沒有類似于ns2009的驅(qū)動就好。觀察發(fā)現(xiàn),果然有一個ns2009.c文件,里面內(nèi)容也和我們想的差不多,
static const struct i2c_device_id ns2009_ts_id[] = {{ "ns2009", 0 },{ }
};
MODULE_DEVICE_TABLE(i2c, ns2009_ts_id);static struct i2c_driver ns2009_ts_driver = {.probe = ns2009_ts_probe,.id_table = ns2009_ts_id,.driver = {.name = NS2009_TS_NAME,},
};
module_i2c_driver(ns2009_ts_driver);
? ? ? ? 這部分代碼因為是包含在zImage里面的,因此也就不需要重新編譯、重新燒入了。和其他驅(qū)動相比較,這算是很方便的一種情形。
4、下載、安裝tslib庫
? ? ? ? tslib基本就是觸摸屏調(diào)試的一個標配。它不僅僅可以幫助我們對觸摸屏做出一些參數(shù)標定,還可以用它做接口,做一些測試或者定制應(yīng)用開發(fā)。首先,我們需要下載一個tslib代碼,
https://github.com/libts/tslib/releases
? ? ? ? 選擇好版本之后,就可以拷貝到ubuntu虛擬機,準備用交叉編譯工具開始編譯,
mkdir __install
./configure -host=arm-linux-gnueabihf -prefix=$PWD/__install
make
make install
? ? ? ? 編譯安裝好之后,所有的文件都被安裝到__install目錄下面。接下來要做的,就是把這些文件拷貝到sd卡的ext4系統(tǒng)上面去,
cp bin/* /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/bin/
cp lib/*.so* /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/lib/ -rfdv
cp lib/ts/ /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/lib/ -rfdv
cp etc/ts.conf /media/feixiaoxing/64959927-1d53-4bb1-8102-d7c16fc29ade/etc/
? ? ? ? 自此,tslib就安裝好了,可以準備測試了。
5、測試驗證tslib
? ? ? ? 測試驗證之前,需要先配置一下環(huán)境變量,有幾個參數(shù)需要設(shè)置下,
export set TSLIB_TSDEVICE=/dev/input/event0
export set TSLIB_CONFFILE=/etc/ts.conf
export set TSLIB_PLUGINDIR=/lib/ts
export set TSLIB_CALIBFILE=/etc/pointercal
export set TSLIB_CONSOLEDEVICE=none
export set TSLIB_FBDEVICE=/dev/fb0
? ? ? ? 第一個參數(shù)表示event設(shè)備節(jié)點的位置。如果ns2009驅(qū)動正常安裝,肯定會有這個節(jié)點的。第二個參數(shù)表示配置文件的位置。第三個參數(shù)表示插件的位置。第四個參數(shù)表示標定參數(shù)保存的位置。第五個參數(shù)可以不設(shè)置,直接寫成none。第六個參數(shù)表示屏幕節(jié)點的位置。
? ? ? ? 當然測試的時候,別忘記點亮屏幕,屏幕不點亮啥也做不了,
echo 34 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio34/direction
echo 1 > /sys/class/gpio/gpio34/value
? ? ? ? 首先,先用ts_calibrate做一下觸摸屏的標定,
# ts_calibrate
xres = 480, yres = 272
? ? ? ? 不出意外,屏幕上可以看到這樣的情形,
? ? ? ? ?有一個十字箭頭的東西會依次出現(xiàn)在四個角落和中間位置,每點擊依次,它就會跳到新的位置。五次都結(jié)束以后,標定就結(jié)束了,
# ts_calibrate
xres = 480, yres = 272
[ 113.404260] random: crng init done
Took 1 samples...
Top left : X = 534 Y = 1156
Took 3 samples...
Top right : X = 3496 Y = 1334
Took 2 samples...
Bot right : X = 3510 Y = 3270
Took 2 samples...
Bot left : X = 453 Y = 3075
Took 1 samples...
Center : X = 1963 Y = 2066
-15.522461 0.126093 0.002039
-46.474915 -0.005545 0.088761
Calibration constants: -1017280 8263 133 -3045780 -363 5817 65536
? ? ? ? 接下里就可以用ts_test開始測試了,
? ? ? ? 測試有兩種方式,一種是拖著十字到處移動,還有一種就是畫圖。如上圖所示,這就是畫圖的測試方法,只不過我們寫了兩個漢字。不管是那種方式,需要先到對應(yīng)的按鈕選中一下。因為電阻屏反應(yīng)沒那么靈敏,等按下去的時候,時間多停留一會,直到按鈕顏色變化之后,再開始測試。如果能寫出自己想要的內(nèi)容,基本表明驅(qū)動移植成功。
? ? ? ? 串口方面,也可以看到這些打印信息,
# ts_test
1178.709275: 265 77 255
1178.748307: 265 77 0
1178.789301: 265 42 255
1178.829277: 508 283 255
1178.868270: 508 283 0
1179.549275: 268 15 255
1179.589293: 284 25 255
1179.629289: 297 38 255