国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

RT-Thread的I2C總線驅(qū)動(dòng)結(jié)構(gòu)分析、移植及應(yīng)用

2017-01-05 01:40
關(guān)鍵詞:核心層時(shí)序嵌入式

高 培

(福建對(duì)外經(jīng)濟(jì)貿(mào)易職業(yè)技術(shù)學(xué)院 信息技術(shù)系,福州 350016)

?

RT-Thread的I2C總線驅(qū)動(dòng)結(jié)構(gòu)分析、移植及應(yīng)用

高 培

(福建對(duì)外經(jīng)濟(jì)貿(mào)易職業(yè)技術(shù)學(xué)院 信息技術(shù)系,福州 350016)

針對(duì)RT-Thread操作系統(tǒng)下I2C總線驅(qū)動(dòng)展開(kāi)研究,對(duì)驅(qū)動(dòng)結(jié)構(gòu)進(jìn)行介紹與分析。以STM32F407VG上的軟件I2C驅(qū)動(dòng)移植為例介紹了驅(qū)動(dòng)移植步驟,并通過(guò)STM32F407VG讀寫24LC02B的實(shí)例,詳細(xì)介紹I2C編程步驟及技術(shù)細(xì)節(jié)。最后通過(guò)實(shí)驗(yàn)驗(yàn)證I2C驅(qū)動(dòng)移植及編程的有效性。實(shí)驗(yàn)結(jié)果表明,RT-Thread操作系統(tǒng)下的I2C總線驅(qū)動(dòng)結(jié)構(gòu)簡(jiǎn)潔,且易于移植及進(jìn)行程序設(shè)計(jì)。

RT-Thread;I2C;驅(qū)動(dòng)結(jié)構(gòu);移植;應(yīng)用

引 言

RT-Thread嵌入式實(shí)時(shí)操作系統(tǒng)(Real-Time Operation System,RTOS)是國(guó)人自創(chuàng)的開(kāi)源實(shí)時(shí)操作系統(tǒng),借鑒了VxWorks、μc/os、RTXC(Real-Time eXecutive in C)等成熟的RTOS的優(yōu)點(diǎn),又具有自己的特點(diǎn),在功能及性能方面不遜色于以上系統(tǒng)[1]。當(dāng)前RT-Thread嵌入式實(shí)時(shí)操作系統(tǒng)在許多嵌入式設(shè)備上特別是物聯(lián)網(wǎng)方面得到了廣泛應(yīng)用[2-5]。I2C(Inter-Integrated Circuit)總線是一種由Philips公司開(kāi)發(fā)的兩線式串行總線(一根時(shí)鐘線,一根數(shù)據(jù)線),I2C總線可以使具有I2C總線接口的設(shè)備相互連接,它采用主從訪問(wèn)模式,主設(shè)備通過(guò)總線訪問(wèn)從設(shè)備。I2C總線具有接口線少,控制方式簡(jiǎn)單,器件封裝形式小,降低了成本。因此,在嵌入式系統(tǒng)中有著廣泛的應(yīng)用[6-7]。

RT-Thread下的I2C總線驅(qū)動(dòng)設(shè)計(jì)類似于Linux,但比Linux更加簡(jiǎn)潔。本文對(duì)RT-Thread(1.2.0版本)下的I2C總線驅(qū)動(dòng)結(jié)構(gòu)進(jìn)行分析,介紹了I2C總線驅(qū)動(dòng)的工作原理和移植方法。最后,以STM32F407VG連接2K位串行CMOS EEPROM(24LC02B)為例[8-9],介紹了RT-Thread及I2C總線驅(qū)動(dòng)移植及應(yīng)用程序設(shè)計(jì)。

1 I2C總線驅(qū)動(dòng)結(jié)構(gòu)

RT-Thread下的I2C總線驅(qū)動(dòng)架構(gòu)分為(如圖1所示):設(shè)備層(i2c_dev.c,位于DeviceDrivers目錄下)、總線核心層(i2c_core.c,位于DeviceDrivers目錄下)、軟件方式I2C接口層(i2c-bit-ops.c,位于DeviceDrivers目錄下)、I2C硬件驅(qū)動(dòng)層(移植目標(biāo),本項(xiàng)目中為stm32_i2c.c,位于Drivers目錄下)、I2C外設(shè)驅(qū)動(dòng)層或應(yīng)用程序。

圖1 RT-Thread下I2C總線驅(qū)動(dòng)架構(gòu)

1.1 I2C總線設(shè)備層(i2c_dev.c)

設(shè)備層(i2c_dev.c)是操作系統(tǒng)與總線核心層間的接口,同時(shí)規(guī)范了I2C總線設(shè)備的讀寫接口,一般用于I2C總線設(shè)備驅(qū)動(dòng)。

設(shè)備層(i2c_dev.c)將I2C總線的操作抽象為基本操作接口(初始化、讀操作、寫操作、控制等),主要函數(shù)如表1所列。

表1 i2c_dev.c主要函數(shù)

常用的接口函數(shù)如下所示:

static rt_err_t i2c_bus_device_control(rt_device_t dev,rt_uint8_t cmd,void *args); // 控制函數(shù)

static rt_size_t i2c_bus_device_write(rt_device_t dev,rt_off_t pos,const void *buffer,rt_size_t count); //寫操作函數(shù)

static rt_size_t i2c_bus_device_read(rt_device_t dev,rt_off_t pos, void *buffer, rt_size_t count); //讀操作函數(shù)

其中,dev為I2C總線設(shè)備rt_device_t類型結(jié)構(gòu)體指針,cmd為操作類型,args為操作類型所對(duì)應(yīng)的數(shù)據(jù)(詳見(jiàn)i2c_dev.c),pos包含操作方式與操作地址(分別對(duì)應(yīng)pos的高十六位和低十六位),buffer為操作緩存首地址,count為緩存數(shù)據(jù)長(zhǎng)度。

1.2 I2C總線核心層(i2c_core.c)

總線核心層(i2c_core.c)可作為應(yīng)用程序或者I2C外設(shè)驅(qū)動(dòng)的接口,是操作系統(tǒng)完成初始化及配置I2C驅(qū)動(dòng)及應(yīng)用程序或者I2C外設(shè)驅(qū)動(dòng)實(shí)現(xiàn)I2C配置及通信的媒介。該層所涉及的主要函數(shù)見(jiàn)表2。

表2 總線核心層(i2c_core.c)主要函數(shù)

需要說(shuō)明的是,應(yīng)用程序或者驅(qū)動(dòng)向系統(tǒng)申請(qǐng)指定I2C的控制權(quán)需要通過(guò)總線核心層的rt_i2c_bus_device_find函數(shù),其具體形式如下所示:

struct rt_i2c_bus_device *rt_i2c_bus_device_find (const char *bus_name);

其中,bus_name為所需申請(qǐng)的I2C總線設(shè)備在系統(tǒng)注冊(cè)時(shí)所使用的名字。

此外,總線核心層提供了三種I2C總線操作方式:傳輸(rt_i2c_transfer)、發(fā)送(rt_i2c_master_send)、接收(rt_i2c_master_recv)。其中rt_i2c_transfer是最常用的接口,具有讀及寫的功能,為驅(qū)動(dòng)或應(yīng)用程序開(kāi)發(fā)提供了便利。其函數(shù)接口如下:rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus,struct rt_i2c_msg msgs[],rt_uint32_t num);

其中,bus為所申請(qǐng)到的總線設(shè)備的rt_i2c_bus_device類型結(jié)構(gòu)體指針,msgs為需要進(jìn)行讀寫操作的rt_i2c_msg類型(需要根據(jù)讀寫時(shí)序來(lái)安排),num為msgs的維數(shù)。rt_i2c_msg結(jié)構(gòu)體具體如下所示:

struct rt_i2c_msg{

rt_uint16_t addr; //設(shè)備地址

rt_uint16_t flags; //操作方式

rt_uint16_t len; //讀寫數(shù)據(jù)長(zhǎng)度

rt_uint8_t *buf; //讀寫數(shù)據(jù)的起始地址

};

1.3 軟件方式I2C總線接口層(i2c-bit-ops.c)

軟件方式I2C總線接口層(i2c-bit-ops.c)提供了使用GPIO來(lái)實(shí)現(xiàn)I2C總線通信的軟件方式接口函數(shù),將I2C總線通信過(guò)程中的開(kāi)始、停止、發(fā)送、接收等具體操作規(guī)范化。用戶移植驅(qū)動(dòng)程序時(shí),無(wú)需再設(shè)計(jì)這些具體操作,只需要完成對(duì)應(yīng)GPIO配置及操作函數(shù)(rt_i2c_bit_ops結(jié)構(gòu)體中,詳見(jiàn)i2c-bit-ops.h文件)即可,極大地規(guī)范并方便了驅(qū)動(dòng)移植。其主要函數(shù)見(jiàn)表3。

表3 i2c-bit-ops.c主要函數(shù)

1.4 I2C總線硬件驅(qū)動(dòng)層

I2C總線硬件驅(qū)動(dòng)層是I2C總線驅(qū)動(dòng)與硬件間的接口,是I2C總線驅(qū)動(dòng)的具體實(shí)現(xiàn),也是驅(qū)動(dòng)移植時(shí)必須完成的主要部分。RT-Thread將具體I2C總線操作抽象并封裝為I2C總線設(shè)備操作(rt_i2c_bus_device_ops),主要包括三個(gè)基本操作:主機(jī)傳輸(master_xfer)、從機(jī)傳輸(slave_xfer)、總線控制(i2c_bus_control),因此對(duì)于用戶來(lái)說(shuō),只需要完成所需基本操作的驅(qū)動(dòng)編寫即可完成驅(qū)動(dòng)的移植工作。以下分別介紹硬件I2C總線及軟件I2C總線的硬件驅(qū)動(dòng)層。

1.4.1 硬件I2C

對(duì)于硬件I2C,其總線的讀寫等具體操作都是通過(guò)寄存器的讀寫來(lái)完成的,因此驅(qū)動(dòng)移植時(shí),只需要按照所需操作的接口格式,對(duì)照寄存器手冊(cè),完成程序編寫[10]。對(duì)于本文所使用的STM32F407VG,其I2C硬件驅(qū)動(dòng)層主要函數(shù)如表4所列。

表4 硬件驅(qū)動(dòng)層(硬件I2C)主要函數(shù)

其中,函數(shù)rt_hw_i2c_init的功能是初始化I2C總線硬件及驅(qū)動(dòng),其主要任務(wù)為:初始化I2C總線所使用的硬件資源(I2C控制器所涉及的寄存器),并將移植完成的操作函數(shù)入口地址等信息通過(guò)rt_i2c_bus_device_register函數(shù)向系統(tǒng)進(jìn)行注冊(cè)。

1.4.2 軟件I2C

軟件I2C是依據(jù)I2C通信時(shí)序標(biāo)準(zhǔn),通過(guò)控制GPIO口來(lái)實(shí)現(xiàn)通信。由于RT-Thread驅(qū)動(dòng)框架中已經(jīng)將軟件方式I2C進(jìn)行規(guī)范,提供標(biāo)準(zhǔn)接口層(i2c-bit-ops.c),因此,軟件I2C的移植也得到了簡(jiǎn)化。與硬件I2C不同,軟件I2C的基本操作已經(jīng)被封裝在標(biāo)準(zhǔn)接口層中(i2c-bit-ops.c),驅(qū)動(dòng)移植時(shí)無(wú)需再重復(fù)這些工作,只需要提供標(biāo)準(zhǔn)接口層的具體實(shí)現(xiàn)函數(shù)(具體形式詳見(jiàn)i2c_bit_ops.h文件中的rt_i2c_bit_ops結(jié)構(gòu)體形式),對(duì)于本文所使用的STM32F407VG,其I2C硬件驅(qū)動(dòng)層需要移植的主要函數(shù)如表5所列。

表5 硬件驅(qū)動(dòng)層(軟件I2C)主要函數(shù)

此外,對(duì)于軟件I2C硬件驅(qū)動(dòng)層中的初始化函數(shù)(rt_hw_i2c_init),其主要編程工作為:①對(duì)I2C接口所使用的兩個(gè)I/O口進(jìn)行初始化;②將set_sda等函數(shù)指針及延時(shí)時(shí)間等參數(shù)封裝入rt_i2c_bit_ops結(jié)構(gòu)中;③調(diào)用rt_i2c_bit_add_bus函數(shù),借助rt_i2c_bit_ops結(jié)構(gòu)向標(biāo)準(zhǔn)接口層進(jìn)行注冊(cè),進(jìn)一步由標(biāo)準(zhǔn)接口層向系統(tǒng)完成總線設(shè)備驅(qū)動(dòng)的注冊(cè)工作。

2 I2C總線驅(qū)動(dòng)移植及應(yīng)用

本節(jié)將詳細(xì)介紹RT-Thread下的I2C總線驅(qū)動(dòng)移植,并以24LC02B的讀寫為例,介紹I2C總線驅(qū)動(dòng)應(yīng)用。本文使用STM32F407VG的PB6和PB7引腳分別作為軟件I2C總線的SCL和SDA,以主模式連接24LC02B模塊。

2.1 I2C總線驅(qū)動(dòng)移植

本文所使用的RT-Thread 1.2.0版本提供了簡(jiǎn)單的I2C驅(qū)動(dòng)支持。為了使用該模塊,需要將i2c_dev.c、i2c_core.c、i2c-bit-ops.c三個(gè)文件添加到工程項(xiàng)目中。之后,在rtconfig.h添加宏定義:

#define RT_USING_I2C

#define RT_USING_I2C_BITOPS

I2C總線驅(qū)動(dòng)移植主要工作在I2C硬件驅(qū)動(dòng)層,該部分主要函數(shù)介紹見(jiàn)第1.4.2節(jié)。移植工作主要分為: I2C總線驅(qū)動(dòng)硬件初始化及操作方法和延時(shí)子程序。

2.1.1 I2C總線驅(qū)動(dòng)硬件初始化及操作方法

I2C總線驅(qū)動(dòng)硬件初始化主要完成I2C總線所涉及的兩個(gè)I/O引腳的硬件初始化及輸入輸出操作。對(duì)于STM32F407VG,I2C總線驅(qū)動(dòng)硬件初始化函數(shù)需要完成的操作如圖2所示:①GPIO引腳外設(shè)時(shí)鐘開(kāi)啟;②GPIO引腳模式初始化;③rt_i2c_bus_device和rt_i2c_bit_ops結(jié)構(gòu)體初始化;④借助標(biāo)準(zhǔn)的接口層向系統(tǒng)注冊(cè)I2C總線(rt_i2c_bit_add_bus)。在系統(tǒng)初始化時(shí)(如rt_init_thread_entry中)調(diào)用該函數(shù),即可完成I2C總線驅(qū)動(dòng)的硬件及系統(tǒng)初始化。

圖2 I2C總線驅(qū)動(dòng)硬件初始化流程圖

操作方法主要完成set_sda、set_scl、get_sda、get_scl四種基本操作的移植,用戶可以根據(jù)處理器手冊(cè)和庫(kù)函數(shù)編程實(shí)現(xiàn)。最后需要將這4個(gè)函數(shù)的入口地址通過(guò)rt_i2c_bit_ops類型結(jié)構(gòu)體形式傳遞給操作系統(tǒng)。

需要說(shuō)明的是,向系統(tǒng)注冊(cè)的I2C總線接口函數(shù)如下:

rt_err_t rt_i2c_bit_add_bus(struct rt_i2c_bus_device *bus, const char *bus_name);

其中,指針bus是指向包含硬件驅(qū)動(dòng)層信息的rt_i2c_

bus_device類型結(jié)構(gòu)體,name為向系統(tǒng)注冊(cè)的該I2C總線名,用戶可以通過(guò)name向系統(tǒng)申請(qǐng)和訪問(wèn)該I2C總線。

2.1.2 延時(shí)子程序

延時(shí)子程序主要用于實(shí)現(xiàn)I2C通信時(shí)序,其默認(rèn)單位為μs,準(zhǔn)確的延時(shí)子程序有助于正確設(shè)置I2C通信速率。對(duì)于使用while(i)形式的延時(shí)子程序,用戶需要根據(jù)處理器的頻率進(jìn)行有針對(duì)性的調(diào)整。

2.2 I2C總線設(shè)備驅(qū)動(dòng)應(yīng)用

24LC02B是一款串行CMOS EEPROM芯片,該芯片使用I2C總線進(jìn)行讀寫等控制。其單字節(jié)寫入時(shí)序、隨機(jī)讀取時(shí)序分別如圖3和圖4所示[9]。本節(jié)將以在指定位置寫入數(shù)據(jù),并讀取該指定位置數(shù)據(jù)為例,來(lái)詳細(xì)介紹RT-Thread下I2C總線設(shè)備驅(qū)動(dòng)的總線核心層接口函數(shù)應(yīng)用,并驗(yàn)證驅(qū)動(dòng)移植的有效性(I2C設(shè)備層一般用于驅(qū)動(dòng)編寫,相對(duì)復(fù)雜,由于篇幅所限,本文使用簡(jiǎn)潔的總線核心層)。

圖3 24LC02B字節(jié)寫入時(shí)序

圖4 24LC02B隨機(jī)讀取時(shí)序

總線核心層接口函數(shù)如第1.2節(jié)中介紹,相比總線設(shè)備層接口函數(shù),其接口函數(shù)格式更簡(jiǎn)單、直觀,方便讀寫時(shí)序的實(shí)現(xiàn)。使用總線核心層接口實(shí)現(xiàn)24LC02B讀寫的程序流程圖如圖5所示。

圖5 24LC02B讀寫程序流程

首先,調(diào)用rt_i2c_bus_device_find函數(shù)向系統(tǒng)申請(qǐng)所需的總線設(shè)備(如圖中“i2c1”);正確申請(qǐng)到總線設(shè)備后,系統(tǒng)會(huì)將該I2C總線設(shè)備的rt_i2c_bus_device類型結(jié)構(gòu)體指針?lè)祷?如圖中存儲(chǔ)在dev中),利用該指針和rt_i2c_transfer函數(shù)(詳見(jiàn)第1.2節(jié))即可實(shí)現(xiàn)24LC02B的字節(jié)寫入與讀取操作,其關(guān)鍵是根據(jù)讀寫時(shí)序合理設(shè)置rt_i2c_msg結(jié)構(gòu)體。

對(duì)于指定位置寫入數(shù)據(jù)操作,其寫入順序?yàn)椋簩懣刂谱?、寫入指定位置地址、寫入?shù)據(jù)。因此,只需要一個(gè)rt_i2c_msg結(jié)構(gòu)體(本程序中使用msg_wr),其具體內(nèi)容為:

msg_wr.addr =24LC02B;

//24LC02B地址

msg_wr.buf = msg_buf_wr;

msg_wr.flags = RT_I2C_WR; //寫操作

msg_buf_wr[0] = 23; //指定寫入地址

msg_buf_wr[1]++;

msg_wr.len = 2; //操作數(shù)據(jù)長(zhǎng)度

len = rt_i2c_transfer(dev,&msg_wr,1); //返回寫入字符數(shù)

對(duì)于讀取指定位置數(shù)據(jù)操作,其寫入順序?yàn)椋簩懣刂谱帧懭胫付ㄎ恢玫刂?、寫控制字、讀取數(shù)據(jù)。注意:兩次寫控制字間不能有STOP時(shí)序。因此不能使用兩次rt_i2c_transfer來(lái)實(shí)現(xiàn)該操作,應(yīng)該使用兩個(gè)rt_i2c_msg結(jié)構(gòu)體來(lái)實(shí)現(xiàn)(本程序中記為使用msg_rd[2]),其具體內(nèi)容為:

// msg_rd[0]初始化

msg_rd[0].addr = 24LC02B;

//24LC02B地址

msg_rd[0].buf = msg_buf_wr;

msg_rd[0].flags = RT_I2C_WR; //寫操作

msg_buf_wr[0] = 23; //指定讀取地址

msg_rd[0].len = 1; //操作數(shù)據(jù)長(zhǎng)度

// msg_rd[1]初始化

msg_rd[1].addr = 24LC02B; //24LC02B地址

msg_rd[1].buf = msg_buf_rd;

msg_rd[1].flags = RT_I2C_RD; //讀操作

msg_buf_wr[0] = 23; //指定讀取地址

msg_rd[0].len = 1; //操作數(shù)據(jù)長(zhǎng)度

len = rt_i2c_transfer(dev,msg_rd,2);

//返回讀取到的字節(jié)數(shù)

由圖6所示實(shí)驗(yàn)結(jié)果可知,程序正確申請(qǐng)到I2C總線設(shè)備后,在地址為23處,從0開(kāi)始寫入字節(jié)數(shù)據(jù),隨后讀取該地址上的字節(jié)數(shù)據(jù),通過(guò)對(duì)比可以看出,讀取到的數(shù)據(jù)與寫入數(shù)據(jù)完全相同。綜上所述,本次I2C總線設(shè)備的驅(qū)動(dòng)移植是成功的,并且利用I2C總線核心層接口進(jìn)行24LC02B的讀寫操作應(yīng)用也是成功的。

結(jié) 語(yǔ)

圖6 實(shí)驗(yàn)結(jié)果

[1] 曹成.嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread原理分析與應(yīng)用[D].青島:山東科技大學(xué),2011.

[2] 宋天楹,張紅梅,馮歡.CAN-RS232轉(zhuǎn)換器在實(shí)時(shí)操作系統(tǒng)RT-Thread上的實(shí)現(xiàn)[J].自動(dòng)化儀表,2012,33(4):70-72.

[3] 蘇憲利,鄭一麟.基于RT-thread的機(jī)床物聯(lián)網(wǎng)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].組合機(jī)床與自動(dòng)化加工技術(shù),2014(6):69-72.

[4] 張麗彪,駱東佳,張艦航,等.基于RT-Thread和Yeelink的物聯(lián)網(wǎng)平臺(tái)開(kāi)發(fā)的應(yīng)用設(shè)計(jì)[J].電子技術(shù)與軟件工程,2015(16):70-70.

[5] 李云紅,田冀達(dá),陳航.RT-Thread操作系統(tǒng)的電池管理系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2015(7):14-17.

[6] 李祥兵,鄭扣根.Linux中I2C總線驅(qū)動(dòng)程序的開(kāi)發(fā)[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(1):41-43.

[7] 朱南皓,李正祥.嵌入式Linux中I2C設(shè)備驅(qū)動(dòng)程序的研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010,26(11):67-69.

[8] RT-Thread開(kāi)發(fā)組.RT-Thread編程指南,2014.

[9] Microchip Technology Inc.24LC01B/02B 1K/2K 2.5V CMOS EEPROMs,1995.

[10] STMicroelectronics.RM0090 Reference manual STM32 F405xx, STM32F407xx,STM32F415xx and STM32 F417xx advanced ARM-based 32-bit MCUs,2012.

[4] 邵長(zhǎng)彬,李洪亮.用Busybox制作嵌入式Linux根文件系統(tǒng)[J].微計(jì)算機(jī)信息,2007,23(10-2):48-50.

[5] 查啟鵬.基于嵌入式Linux的Flash驅(qū)動(dòng)與文件系統(tǒng)的研究與實(shí)現(xiàn)[D].南京:東南大學(xué),2008.

[6] 王學(xué)龍.嵌入式Linux系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2001.

[7] 彭浩,龔杰,秦建敏.基于S3C2440的嵌入式Linux根文件系統(tǒng)構(gòu)建[J].電子設(shè)計(jì)工程,2010,18(6):20-22.

[8] 李桂香,常赟杰.嵌入式Linux文件系統(tǒng)研究與應(yīng)用[J].電腦開(kāi)發(fā)與應(yīng)用,2010,23(5):5-7.

陳選育(工程師),研究方向?yàn)楣馔ㄐ偶夹g(shù)、嵌入式軟件開(kāi)發(fā)。

(責(zé)任編輯:薛士然 收稿日期:2016-06-23)

Structure Analysis,Migration and Application of I2C Bus Driver for RT-Thread

Gao Pei

(Department of Information Technology,Fujian International Business&Economic College,Fuzhou 350016,China)

Aiming at the I2C bus driver of RT-Thread operating system,the structure of I2C bus driver is presented and analyzed.The I2C driver migration process is introduced with the example of the I2C drive migration for STM32F407VG,and by the read/write 24LC02B through STM32F407VG,the I2C programming steps and technical details are introduced.Finally,an experiment is taken to verify the effectiveness of the migration and programming of I2C driver.The experiment results show that the I2C bus driver structure of RT-Thread is simple and easy for migration.

RT-Thread;I2C;driver structure;migration;application

TP316.2

A

?士然

2016-06-17)

猜你喜歡
核心層時(shí)序嵌入式
清明
Focal&Naim同框發(fā)布1000系列嵌入式揚(yáng)聲器及全新Uniti Atmos流媒體一體機(jī)
基于不同建設(shè)時(shí)序的地鐵互聯(lián)互通方案分析
TS系列紅外傳感器在嵌入式控制系統(tǒng)中的應(yīng)用
搭建基于Qt的嵌入式開(kāi)發(fā)平臺(tái)
基于FPGA 的時(shí)序信號(hào)光纖傳輸系統(tǒng)
油田光纖化改造核心層建設(shè)方案的探討
淺談寬帶IP城域網(wǎng)結(jié)構(gòu)規(guī)劃和建設(shè)
校園網(wǎng)核心層設(shè)計(jì)探究
政府辦公區(qū)域無(wú)線網(wǎng)絡(luò)覆蓋的設(shè)計(jì)
闸北区| 百色市| 惠东县| 平顶山市| 虎林市| 阿拉善右旗| 建阳市| 通榆县| 阳城县| 华蓥市| 临安市| 祁东县| 吉隆县| 南和县| 遂昌县| 东阿县| 丰顺县| 咸宁市| 厦门市| 中方县| 安化县| 孟州市| 平南县| 贵港市| 晴隆县| 思南县| 蚌埠市| 丹东市| 临夏县| 林芝县| 汶上县| 牙克石市| 楚雄市| 大庆市| 安康市| 金华市| 舟曲县| 竹北市| 曲周县| 徐水县| 内丘县|