色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

迅為imx6ull開發(fā)板Linux I2C驅(qū)動實驗-應(yīng)用程序與I2C通信

發(fā)布時間:2021-11-11 11:03    發(fā)布者:落風(fēng)
關(guān)鍵詞: 迅為IMX6開發(fā)板
本章內(nèi)容對應(yīng)視頻講解鏈接(在線觀看):
程序源碼在網(wǎng)盤資料“imx6ull 驅(qū)動程序配套資料\021-Linux I2C 驅(qū)動實驗”路徑下。
我們可以先來體驗一下,在 Linux 上操作 I2C 是多么的容易,我們可以先來看一下系統(tǒng)里面都有哪些 I2C的節(jié)點,這里以終結(jié)者 imx6ull 開發(fā)板為例。如下圖所示:


Linux 有一個非常重要的概念叫一切皆文件,那么我們能不能在應(yīng)用層通過 open 這些節(jié)點來操作 I2C 來跟外設(shè) I2C 通信的芯片進行一個數(shù)據(jù)交流呢?當(dāng)然是可以的,我們來一起看一下,這里我們以 7 寸 RGB 屏幕上的觸摸芯片 FT5X06 為例,迅為所有開發(fā)板都是支持迅為 7 寸 RGB 屏幕屏的,所有都是可以進行這個驗的。迅為的屏幕除了 4.3 寸和 10.1 寸屏外,其他尺寸的屏幕的觸摸芯片都是 FT5X06,都是可以進行這個實驗的。
本次實驗我們使用的從機為 FT5X06 觸摸芯片。 FT5x06 系列 ICs 是單芯片電容觸摸屏控制器 IC,帶有一個內(nèi)置的 8 位微控制器單元(MCU)。采用互電容的方法,在配合的相互的電容式觸摸面板,它支持真正的多點觸摸功能。FT5x06 具有用戶友好的輸入的功能,這可以應(yīng)用在許多便攜式設(shè)備,例如蜂窩式電話,移動互聯(lián)網(wǎng)設(shè)備,上網(wǎng)本和筆記本個人電腦。FT5x06 系列 IC 包括 FT5206/FT5306/FT5406。FT5x06 可以捕獲 5 個觸摸點,編寫驅(qū)動時,只要去獲取這幾個點的數(shù)據(jù),然后上報就可以了。之后我們的實驗也是讀取的其中一個寄存器,如下圖所示,我們可以在 FT5X06 的數(shù)據(jù)手冊上查找到。


我們打開 imx6ull 開發(fā)板的底板原理圖,我們通過原理圖先來確定一下 FT5X06 使用的是哪個 I2C,通過下面的截圖我們可以看到在終結(jié)者開發(fā)板上觸摸芯片 FT5X06 使用的是 I2C2。


我們輸入如下圖所示命令,查找 I2C2 對應(yīng)的設(shè)備節(jié)點,我們查找如下圖所示:
.
所以 I2C2 設(shè)備的地址是 0038,對應(yīng)的節(jié)點是 dev 下面的 i2c-1。如果我們要在終結(jié)者的上和觸摸芯片F(xiàn)T5X06 進行通信,只要操作 dev 下的 i2c-1 這個節(jié)點就可以了。
那我們怎么在應(yīng)用層操作 I2C 呢?應(yīng)用層操作 I2C 是以數(shù)據(jù)包進行交流的,所以我們在應(yīng)用層就要進行封包的操作。數(shù)據(jù)包對應(yīng)的結(jié)構(gòu)體是 i2c_rdwr_ioctl_data,這個結(jié)構(gòu)體定義在 include\uapi\linux\i2c-dev.h 下面:定義如下:
/* This is the structure as used in the I2C_RDWR ioctl call */

struct i2c_rdwr_ioctl_data
{
struct i2c_msg __user *msgs; /* pointers to i2c_msgs */
__u32 nmsgs; /* number of i2c_msgs */
};
第一個結(jié)構(gòu)體成員是我們要發(fā)送的數(shù)據(jù)包的指針,第二個結(jié)構(gòu)體成員是發(fā)送數(shù)據(jù)包的個數(shù)。
我們來看一下 i2c_msg 結(jié)構(gòu)體的定義,這個結(jié)構(gòu)體是定義在 include\uapi\linux\i2c.h 下面,定義如下:
struct i2c_msg
{
__u16 addr; /* slave address */
__u16 flags;
#define I2C_M_TEN 0x0010 /* this is a ten bit chip address */
#define I2C_M_RD 0x0001 /* read data, from slave to master */
#define I2C_M_STOP 0x8000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_NOSTART */
#define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NO_RD_ACK 0x0800 /* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_RECV_LEN 0x0400 /* length will be first received byte */
__u16 len; /* msg length */
__u8 *buf; /* pointer to msg data */
};
結(jié)構(gòu)體成員 addr 是我們從機的地址,flags 為讀寫標(biāo)志位,如果 flags 為 1,則為讀,反之為 0,則為寫。len 為 buf 的大小,單位是字節(jié)。當(dāng) flags 為 1 是,buf 就是我們要接收的數(shù)據(jù),當(dāng) flags 為 0 時,就是我們要發(fā)送的數(shù)據(jù)。
那么我們要怎么設(shè)計我們的程序呢?我們來看一下。
/*
* @Author: topeet
* @Description: 應(yīng)用程序與 I2c 通信
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int fd;
int ret;

/**
* @description: i2c_read_data i2c 讀數(shù)據(jù)
* @param {unsignedint} slave_addr:從機設(shè)備的地址
* @param {unsignedchar} reg_addr:寄存器的地址
* @return {*}
*/
int i2c_read_data(unsigned int slave_addr, unsigned char reg_addr)
{
unsigned char data;
//定義一個要發(fā)送的數(shù)據(jù)包 i2c_read_lcd
struct i2c_rdwr_ioctl_data i2c_read_lcd;
//定義初始化 i2c_msg 結(jié)構(gòu)體
struct i2c_msg msg[2] = {
[0] = {
.addr = slave_addr, //設(shè)置從機額地址
.flags = 0, //設(shè)置為寫
.buf = ®_addr, //設(shè)置寄存器的地址
.len = sizeof(reg_addr)}, //設(shè)置寄存器的地址的長度
[1] = {.addr = slave_addr, //設(shè)置從機額地址
.flags = 1, //設(shè)置為讀
.buf = &data, //設(shè)置寄存器的地址
.len = sizeof(data)}, //設(shè)置寄存器的地址
};
//初始化數(shù)據(jù)包的數(shù)據(jù)
i2c_read_lcd.msgs = msg;
//初始化數(shù)據(jù)包的個數(shù)
i2c_read_lcd.nmsgs = 2;
//操作讀寫數(shù)據(jù)包
ret = ioctl(fd, I2C_RDWR, &i2c_read_lcd);
if (ret < 0)
{
perror("ioctl error ");
return ret;
}
return data;
}
int main(int argc, char *argv[])
{
int TD_STATUS;
//打開設(shè)備節(jié)點
fd = open("/dev/i2c-1", O_RDWR);
if (fd < 0)
{

//打開設(shè)備節(jié)點失敗
perror("open error \n");
return fd;
}
while (1)
{
//i2C 讀從機地址為 0x38,寄存器地址為 0x02 的數(shù)據(jù)
//我們從數(shù)據(jù)手冊中得知 TD_STATUS 的地址為 0x02
TD_STATUS = i2c_read_data(0x38, 0x02);
// 打印 TD_STATUS 的值
printf("TD_STATUS value is %d \n", TD_STATUS);
sleep(1);
}
close(fd);
return 0;
}
編譯應(yīng)用程序程序如下圖所示:


我們在掛載 nfs 以后,進入到共享目錄/mnt/nfs/imx6ull/38i2c 目錄下,運行應(yīng)用程序,當(dāng)我們沒有觸摸屏幕時,如下圖所示:


當(dāng)我們用一根手指觸摸時,如下圖所示:

當(dāng)我們用三根手指觸摸時,如下圖所示:

當(dāng)我們用五根手指觸摸時,如下圖所示:

迅為imx6ull開發(fā)板:

核心板參數(shù)
尺寸:38mm*42mm
PCB:6層
CPU:iMX6ULL   ARM Cortex-A7架構(gòu) 單核
iMX6ULL 商業(yè)級:內(nèi)存:512M 存儲:8G EMMC
iMX6ULL 工業(yè)級:內(nèi)存:256M 存儲:512M FLASH  
工作電壓:5V~16V 電壓供電
系統(tǒng)支持:Linux-QT系統(tǒng);Ubuntu core系統(tǒng);Youcto系統(tǒng);Buildroot系統(tǒng);
商業(yè)級運行溫度:-20℃ ~ +80℃
工業(yè)級運行溫度:-40℃ ~ +80℃
引腳間距:1.27mm
引角擴展:i.MX6功能全部引出,146PIN腳
連接方式:郵票孔
底板參數(shù)

尺寸:12*19cm
PCB:2層
POWER:5V~16V電壓供電
SWITCH:電源開關(guān)
EEPROM 存儲:256字節(jié),掉電后數(shù)據(jù)不丟失
4G模塊:1個 全網(wǎng)通 (選配)
WIFI藍牙模塊:WIFI/藍牙二合一模塊,工作頻段 2.4GHz,支持 IEEE802.11bgn 等標(biāo)準(zhǔn),支持藍牙 4.0 協(xié)議。
LVDS接口:1路(一個是標(biāo)準(zhǔn)HDMI 座(CON3),另一個是 30pin 的 FPC 座(J18), 兩個接口實際上是同一路 LVDS 信號,用來連接迅為電子的 LVDS 屏幕)
RGB接口:1路
CAN:2 路 CAN 總線接口
RS485:1 路 RS485 總線接口
MIC:支持錄音輸入
PHONE:支持耳機輸出
USB OTG:1路
USB HOST:2路
USB-UART:1路
mini HDMI:1個(一路標(biāo)準(zhǔn)MINI-HDMI 接口,i.MX6ULL處理器本身沒有支持HDMI,通過一個 RGB 轉(zhuǎn) HDMI 的芯片擴展出HDMI接口,通過該接口來連接HDMI顯示器。 )
網(wǎng)口:2路百兆以太網(wǎng),RJ45 接口
TF卡槽:1個標(biāo)準(zhǔn)TF卡接口
SIM卡槽:1個標(biāo)準(zhǔn)SIM卡接口
T&H接口:溫濕度傳感器接口
TTL/RS485接口:TTL/RS485接口二選一
BUZZER:1個蜂鳴器
IRDA:1個紅外一體化接收頭   
ADC電位器:支持
DIP SWITCH:8位撥碼開關(guān)
JTAG:1個(可以通過下載/調(diào)試器來調(diào)試 i.MX6ULL 處理器)
CAMERA接口:1個 支持500萬攝像頭
TTL串口接口:20PIN (gpio引出:兩個ad,一個spi,一路ttl。一路i2c,5個gpio,5v,3.3v電源)
GPIO接口:20PIN(包括:兩路ADC,一路SPI,5個GPIO,一路TTL串口,一路I2C接口。)
重力加速度傳感器:支持
紅外接收模塊:支持
光環(huán)境傳感器:支持
實時時鐘:斷電后系統(tǒng)時間不丟失
LED:2個
按鍵:3個












本文地址:http://www.54549.cn/thread-778297-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表