chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)EM9170工控主板I2C總線介紹

英創(chuàng)信息技術(shù) ? 來源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-01-14 15:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

EM9170提供了一路硬件I2C總線,與GPIO6和GPIO7復(fù)用。系統(tǒng)啟動后,引腳狀態(tài)默認(rèn)為GPIO輸入狀態(tài)。當(dāng)打開I2C后,系統(tǒng)重新設(shè)置GPIO引腳為I2C總線模式。在使用時(shí)需要注意,I2C的兩條信號線上均要加上拉電阻才能正常使用I2C功能。

在CE6.0操作系統(tǒng)中,I2C資源的使用,需要系統(tǒng)驅(qū)動程序作為支持。所以使用時(shí),可以反復(fù)調(diào)用DeviceIoControl來實(shí)現(xiàn)。為了方便使用,英創(chuàng)公司基于驅(qū)動程序,封裝了4個(gè)I2C的操作函數(shù)便于應(yīng)用程序調(diào)用,在這4個(gè)函數(shù)內(nèi)都是調(diào)用DeviceIoControl來實(shí)現(xiàn),相關(guān)源碼在例程文件夾的I2C.CPP文件中。由于I2C操作時(shí),需要傳輸?shù)膮?shù)量較多,所以在I2C的API函數(shù)中使用了一個(gè)統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)來作為參數(shù)傳遞載體,該數(shù)據(jù)結(jié)構(gòu)的定義如下:
typedef struct
{
BYTE SlaveAddr; // 要操作的I2C器件的設(shè)備物理地址
WORD RegAddr; // 要操作的設(shè)備的存貯器起始地址
BYTE *pDataBuff; // 要寫入/讀出的數(shù)據(jù)BUFF
int iDLen; // 要寫入/讀出的數(shù)據(jù)的字節(jié)長度
} I2CParameter , *pI2CParameter;
在進(jìn)行I2C操作之前,需要設(shè)置I2C設(shè)備的物理地址、要操作的存貯器起始地址,數(shù)據(jù)長度及數(shù)據(jù)。即定義一個(gè)I2CParameter類型的變量并設(shè)置相應(yīng)參數(shù),在調(diào)用I2CWrite和I2CRead時(shí),將該變量傳遞給pI2CParameter類型的指針即可。如:

I2CParameter I2C1; // 定義一個(gè)I2CParameter結(jié)構(gòu)類型的變量
I2C1.SlaveAddr=0xa0; // I2C設(shè)備物理地址設(shè)置為0xA0
I2C1.RegAddr=0; // 要操作的I2C設(shè)備的寄存器起始地址是0
I2C1.pDataBuff = InBuffer; // I2C操作所分配的BUFF
I2C1.iDLen=50; // 要操作的數(shù)據(jù)長度是50字節(jié)
EM9170的I2C驅(qū)動只支持主機(jī)工作模式、最高400KHz的工作時(shí)鐘,可以多個(gè)I2C設(shè)備并聯(lián),由I2C設(shè)備的物理地址來進(jìn)行區(qū)分。封裝后的I2C操作函數(shù)說明如下:
//----------------------------------------------------------------------------
// I2COpen:該函數(shù)主要是打開I2C端口并設(shè)置好I2C的工作模式。
// 主要任務(wù)是:
// 打開I2C,復(fù)位I2C控制器,設(shè)置I2C工作在Master模式,設(shè)置I2C工作時(shí)鐘為400KHz
//----------------------------------------------------------------------------
HANDLE I2COpen( );
//----------------------------------------------------------------------------
// I2CWrite:通過已打開的I2C設(shè)備進(jìn)行數(shù)據(jù)寫操作
// 輸入?yún)?shù):
// hDevice:已打開設(shè)備的HANDLE值
// pI2CPar:操作I2C設(shè)備時(shí)I2CParameter類型的指針
// 返回:
// 操作成功 TRUE
// 操作失敗 FALSE
//----------------------------------------------------------------------------
bool I2CWrite(HANDLE hDevice , pI2CParameter pI2CPar);
/*----------------------------------------------------------------------------
// I2CRead:通過已打開的I2C設(shè)備進(jìn)行數(shù)據(jù)讀操作
// 輸入?yún)?shù):
// hDevice:已打開設(shè)備的HANDLE值
// pI2CPar:操作I2C設(shè)備時(shí)I2CParameter類型的指針
// 返回:
// 操作成功 TRUE
// 操作失敗 FALSE
// ------------------------------------------------------------------------------*/
bool I2CRead(HANDLE hDevice , pI2CParameter pI2CPar);
// ------------------------------------------------------------------------------*/
// I2CClose:關(guān)閉I2C端口。
// 在不使用I2C時(shí),需要關(guān)閉已打開的I2C端口以對話釋放相關(guān)資源。
// 輸入?yún)?shù):
// 成功打開的I2C設(shè)備的HANDLE值
// 返回:
// 操作成功 TRUE
// 操作失敗 FALSE
// ------------------------------------------------------------------------------*/
bool I2CClose( HANDLE hDevice );
下面是基于上述API函數(shù),對FM24L256鐵電存貯器進(jìn)行測試的例程:

HANDLE hI2C;
I2CParameter I2C1;
BYTE InBuffer[50],OutBuffer[50];
int i1;
// 初始化I2C設(shè)備參數(shù)
I2C1.SlaveAddr=0xa0; // I2C設(shè)備物理地址設(shè)置,每種器件應(yīng)有對應(yīng)的物理地址
I2C1.RegAddr=0; // 要操作的I2C設(shè)備的寄存器地址
I2C1.iDLen=50; // 要操作讀/寫的數(shù)據(jù)長度
I2C1.pDataBuff = InBuffer; // 數(shù)據(jù)緩沖區(qū),這里為寫入緩沖區(qū)
for(i1=0;i1<50;i1++) // 產(chǎn)生測試用的隨機(jī)數(shù)據(jù)
{
InBuffer[i1] = rand() & 0xff;
}
hI2C = I2COpen(); // 打開I2C端口
if( hI2C == NULL )
{
printf('I2C Open ERR!\r\n');
return 0;
}
if( I2CWrite( hI2C , &I2C1 ) ) // 向已打開的I2C設(shè)備進(jìn)行寫操作
{
printf('I2C Write Ok:len=%d\r\n',I2C1.iDLen);
I2C1.pDataBuff = OutBuffer; // 重新設(shè)定數(shù)據(jù)緩沖區(qū),這里為讀出緩沖區(qū)
if( I2CRead( hI2C , &I2C1 ) ) // 從已開打的I2C設(shè)備讀取數(shù)據(jù)
{
printf('I2C Read Ok:len=%d\r\n',I2C1.iDLen);
for(i1=0;i1<50;i1++) // 寫入數(shù)據(jù)和讀出數(shù)據(jù)進(jìn)行比較
{
if( InBuffer[i1] != OutBuffer[i1] )
{
break;
}
}
if(i1 == 50)
printf('All Test Data OK!\r\n');
else
printf('Test Data Error:%d\r\n',i1);
}
}
I2CClose( hI2C ); // 關(guān)閉已打開的I2C端口

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6107

    瀏覽量

    36952
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    I2C總線復(fù)用

    帝晶智慧屏I2C總線復(fù)用
    的頭像 發(fā)表于 03-11 17:20 ?1855次閱讀

    I2C總線通信原理 如何設(shè)計(jì)I2C總線電路

    、高效的通信接口標(biāo)準(zhǔn)。I2C總線通信原理主要包括以下要點(diǎn): 總線結(jié)構(gòu) : I2C總線僅使用兩條信號線,即串行數(shù)據(jù)線(SDA)和串行時(shí)鐘線(S
    的頭像 發(fā)表于 01-31 15:01 ?1880次閱讀

    基于I2C總線的智能家居應(yīng)用

    隨著科技的飛速發(fā)展,智能家居系統(tǒng)已經(jīng)成為現(xiàn)代生活的一個(gè)重要組成部分。I2C(Inter-Integrated Circuit)總線是一種串行通信協(xié)議,廣泛應(yīng)用于微控制器和各種傳感器之間,因其簡單
    的頭像 發(fā)表于 01-17 16:21 ?1010次閱讀

    I2C總線的優(yōu)缺點(diǎn)分析

    I2C總線作為一種廣泛使用的串行通信協(xié)議,以其簡單性和高效性在嵌入式系統(tǒng)中占據(jù)著重要地位。 I2C總線的優(yōu)點(diǎn) 1. 簡單性和低成本 I2C
    的頭像 發(fā)表于 01-17 15:50 ?1763次閱讀

    I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解

    I2C(Inter-Integrated Circuit)總線是一種用于連接微控制器和各種外圍設(shè)備的通信協(xié)議。它使用兩條線:串行數(shù)據(jù)線(SDA)和串行時(shí)鐘線(SCL),實(shí)現(xiàn)了設(shè)備之間的簡單、高效通信
    的頭像 發(fā)表于 01-17 15:46 ?1391次閱讀

    如何選擇I2C總線拉電阻

    I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個(gè)設(shè)備通過兩條線(數(shù)據(jù)線SDA和時(shí)鐘線SCL)進(jìn)行通信。為了確保數(shù)據(jù)信號的穩(wěn)定性和減少反射,I2C總線的數(shù)據(jù)線SDA和時(shí)鐘線SCL都需要
    的頭像 發(fā)表于 01-17 15:43 ?1097次閱讀

    I2C總線與Arduino的接口示例

    在現(xiàn)代電子設(shè)計(jì)中,I2C總線因其簡單性和靈活性而廣受歡迎。它允許多個(gè)設(shè)備共享同一通信線路,從而節(jié)省空間和成本。Arduino,作為一個(gè)多功能的微控制器平臺,自然也支持I2C通信。 I2C
    的頭像 發(fā)表于 01-17 15:34 ?2360次閱讀

    I2C總線的工作模式介紹

    在現(xiàn)代電子系統(tǒng)中,I2C總線作為一種多主機(jī)、多從機(jī)的串行通信協(xié)議,扮演著至關(guān)重要的角色。它允許多個(gè)設(shè)備共享同一總線,進(jìn)行數(shù)據(jù)傳輸,從而簡化了系統(tǒng)設(shè)計(jì)并降低了成本。 I2C
    的頭像 發(fā)表于 01-17 15:32 ?1635次閱讀

    I2C總線協(xié)議詳細(xì)解析

    1. I2C總線簡介 I2C總線由Philips Semiconductor(現(xiàn)為NXP Semiconductors)在1980年代初期開發(fā)。它是一種多主機(jī)
    的頭像 發(fā)表于 01-17 15:22 ?1572次閱讀

    I2C總線故障排除技巧

    I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個(gè)設(shè)備在兩條線上(數(shù)據(jù)線SDA和時(shí)鐘線SCL)進(jìn)行通信。由于其簡單性和靈活性,I2C總線在嵌入式系統(tǒng)中非常流行。然而,當(dāng)
    的頭像 發(fā)表于 01-17 15:20 ?3870次閱讀

    I2C總線與單片機(jī)的連接

    在現(xiàn)代電子系統(tǒng)中,單片機(jī)(MCU)是核心控制單元,而I2C總線作為一種多主機(jī)、多從機(jī)的串行通信協(xié)議,因其簡單、高效和節(jié)省引腳的特性而被廣泛應(yīng)用于各種電子設(shè)備中。 I2C總線概述
    的頭像 發(fā)表于 01-17 15:18 ?1971次閱讀

    I2C總線設(shè)備地址設(shè)置方法

    I2C總線是一種廣泛使用的串行通信協(xié)議,它允許多個(gè)設(shè)備在兩條線上(數(shù)據(jù)線SDA和時(shí)鐘線SCL)進(jìn)行通信。每個(gè)設(shè)備都有一個(gè)唯一的地址,以確保數(shù)據(jù)能夠正確地發(fā)送到目標(biāo)設(shè)備。 I2C地址概述 I2C
    的頭像 發(fā)表于 01-17 15:17 ?6978次閱讀

    I2C總線應(yīng)用實(shí)例分析

    在現(xiàn)代電子系統(tǒng)中,I2C總線因其簡單、靈活和高效的特點(diǎn)而被廣泛應(yīng)用于各種設(shè)備之間的通信。 I2C總線概述 I2C
    的頭像 發(fā)表于 01-17 15:09 ?1243次閱讀

    I2C總線與SPI總線的比較

    在現(xiàn)代電子系統(tǒng)中,微控制器與各種外設(shè)之間的通信是必不可少的。I2C和SPI是兩種流行的串行通信協(xié)議,它們各自具有獨(dú)特的特點(diǎn)和應(yīng)用場景。 I2C總線 I2C是一種多主機(jī)、多從機(jī)的同步通信
    的頭像 發(fā)表于 01-17 15:08 ?1724次閱讀

    I2C總線上拉電阻阻值如何確定?

    導(dǎo)讀I2C總線在產(chǎn)品設(shè)計(jì)中被廣泛應(yīng)用,盡管其結(jié)構(gòu)簡單,但經(jīng)常發(fā)生上拉電阻設(shè)計(jì)不合理的問題。本文將對I2C上拉電阻的選擇進(jìn)行簡要分析。一根信號線上,通過電阻連接一個(gè)固定的高電平VCC,信號線初始、空閑
    的頭像 發(fā)表于 12-27 11:34 ?2397次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>上拉電阻阻值如何確定?