91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

在CE6.0操作系統(tǒng)中,I2C資源的使用,需要系統(tǒng)驅(qū)動(dòng)程序作為支持。所以使用時(shí),可以反復(fù)調(diào)用DeviceIoControl來(lái)實(shí)現(xiàn)。為了方便使用,英創(chuàng)公司基于驅(qū)動(dòng)程序,封裝了4個(gè)I2C的操作函數(shù)便于應(yīng)用程序調(diào)用,在這4個(gè)函數(shù)內(nèi)都是調(diào)用DeviceIoControl來(lái)實(shí)現(xiàn),相關(guān)源碼在例程文件夾的I2C.CPP文件中。由于I2C操作時(shí),需要傳輸?shù)膮?shù)量較多,所以在I2C的API函數(shù)中使用了一個(gè)統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)來(lái)作為參數(shù)傳遞載體,該數(shù)據(jù)結(jié)構(gòu)的定義如下:
typedef struct
{
BYTE SlaveAddr; // 要操作的I2C器件的設(shè)備物理地址
WORD RegAddr; // 要操作的設(shè)備的存貯器起始地址
BYTE *pDataBuff; // 要寫(xiě)入/讀出的數(shù)據(jù)BUFF
int iDLen; // 要寫(xiě)入/讀出的數(shù)據(jù)的字節(jié)長(zhǎng)度
} I2CParameter , *pI2CParameter;
在進(jìn)行I2C操作之前,需要設(shè)置I2C設(shè)備的物理地址、要操作的存貯器起始地址,數(shù)據(jù)長(zhǎng)度及數(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ù)長(zhǎng)度是50字節(jié)
EM9170的I2C驅(qū)動(dòng)只支持主機(jī)工作模式、最高400KHz的工作時(shí)鐘,可以多個(gè)I2C設(shè)備并聯(lián),由I2C設(shè)備的物理地址來(lái)進(jìn)行區(qū)分。封裝后的I2C操作函數(shù)說(shuō)明如下:
//----------------------------------------------------------------------------
// I2COpen:該函數(shù)主要是打開(kāi)I2C端口并設(shè)置好I2C的工作模式。
// 主要任務(wù)是:
// 打開(kāi)I2C,復(fù)位I2C控制器,設(shè)置I2C工作在Master模式,設(shè)置I2C工作時(shí)鐘為400KHz
//----------------------------------------------------------------------------
HANDLE I2COpen( );
//----------------------------------------------------------------------------
// I2CWrite:通過(guò)已打開(kāi)的I2C設(shè)備進(jìn)行數(shù)據(jù)寫(xiě)操作
// 輸入?yún)?shù):
// hDevice:已打開(kāi)設(shè)備的HANDLE值
// pI2CPar:操作I2C設(shè)備時(shí)I2CParameter類型的指針
// 返回:
// 操作成功 TRUE
// 操作失敗 FALSE
//----------------------------------------------------------------------------
bool I2CWrite(HANDLE hDevice , pI2CParameter pI2CPar);
/*----------------------------------------------------------------------------
// I2CRead:通過(guò)已打開(kāi)的I2C設(shè)備進(jìn)行數(shù)據(jù)讀操作
// 輸入?yún)?shù):
// hDevice:已打開(kāi)設(shè)備的HANDLE值
// pI2CPar:操作I2C設(shè)備時(shí)I2CParameter類型的指針
// 返回:
// 操作成功 TRUE
// 操作失敗 FALSE
// ------------------------------------------------------------------------------*/
bool I2CRead(HANDLE hDevice , pI2CParameter pI2CPar);
// ------------------------------------------------------------------------------*/
// I2CClose:關(guān)閉I2C端口。
// 在不使用I2C時(shí),需要關(guān)閉已打開(kāi)的I2C端口以對(duì)話釋放相關(guān)資源。
// 輸入?yún)?shù):
// 成功打開(kāi)的I2C設(shè)備的HANDLE值
// 返回:
// 操作成功 TRUE
// 操作失敗 FALSE
// ------------------------------------------------------------------------------*/
bool I2CClose( HANDLE hDevice );
下面是基于上述API函數(shù),對(duì)FM24L256鐵電存貯器進(jìn)行測(cè)試的例程:

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

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

    關(guān)注

    7

    文章

    6107

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    I2C總線-通信線纜長(zhǎng)度的影響及改進(jìn)措施

    I2C總線確實(shí)不適合遠(yuǎn)距離通信,尤其是需要使用線纜與I2C接口器件進(jìn)行通信,這里的“不適合”并不是說(shuō)不可以,這也是本文的重點(diǎn)。一般使用I2C總線
    發(fā)表于 01-21 06:03

    探索PCF8584:I2C總線控制器的卓越之選

    探索PCF8584:I2C總線控制器的卓越之選 在電子工程師的日常工作中,選擇合適的芯片來(lái)實(shí)現(xiàn)特定功能至關(guān)重要。今天,我們就來(lái)深入探討一款功能強(qiáng)大的I2C總線控制器——PCF8584,
    的頭像 發(fā)表于 12-28 15:40 ?563次閱讀

    P82B715:I2C總線擴(kuò)展的得力助手

    P82B715:I2C總線擴(kuò)展的得力助手 在電子設(shè)計(jì)領(lǐng)域,I2C總線是一種常用的通信協(xié)議,但它的總線電容限制往往會(huì)影響實(shí)際通信距離和系統(tǒng)設(shè)計(jì)
    的頭像 發(fā)表于 12-26 10:20 ?747次閱讀

    基于FPGA的I2C控制模塊設(shè)計(jì)

    I2C_WRITE_WDATA.v模塊實(shí)現(xiàn)I2C寫(xiě)時(shí)序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發(fā)表于 12-26 09:48 ?5058次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設(shè)計(jì)

    TCA39306雙向I2C總線和SMBus電壓電平轉(zhuǎn)換器技術(shù)解析

    TCA39306雙向I2C總線和SMBus電壓電平轉(zhuǎn)換器技術(shù)解析 在電子設(shè)計(jì)領(lǐng)域,電壓電平轉(zhuǎn)換是一個(gè)常見(jiàn)且關(guān)鍵的問(wèn)題,特別是在涉及不同電壓標(biāo)準(zhǔn)的總線通信時(shí)。TCA39306作為一款雙路
    的頭像 發(fā)表于 12-17 10:00 ?394次閱讀

    I2C的SDA仲裁介紹

    I2C 支持 SDA 沖突檢測(cè)和仲裁,可以保證在多個(gè)主機(jī)企圖控制 I2C 總線時(shí),I2C 總線上的數(shù)據(jù)不被破壞。每個(gè)主機(jī)發(fā)送數(shù)據(jù)時(shí),都會(huì)同時(shí)
    發(fā)表于 12-16 06:25

    I2C總線協(xié)議

    I2C 總線使用兩根信號(hào)線(數(shù)據(jù)線 SDA 和時(shí)鐘線 SCL)在設(shè)備間傳輸數(shù)據(jù)。SCL 為單向時(shí)鐘線,固定由主機(jī)驅(qū)動(dòng)。SDA 為雙向數(shù)據(jù)線,在數(shù)據(jù)傳輸過(guò)程中由收發(fā)兩端分時(shí)驅(qū)動(dòng)。 I2C 總線
    發(fā)表于 12-15 08:07

    基于CW32 MCU的I2C接口優(yōu)化穩(wěn)定讀寫(xiě)EEPROM關(guān)鍵技術(shù)

    CW32 MCU優(yōu)化I2C接口,確保在與EEPROM芯片通信時(shí)的穩(wěn)定性。內(nèi)容涵蓋以下幾個(gè)關(guān)鍵技術(shù)點(diǎn): I2C時(shí)序與頻率調(diào)整:介紹如何根據(jù)EEPROM的特性,合理設(shè)置
    發(fā)表于 12-03 07:29

    I2C的優(yōu)點(diǎn)介紹

    簡(jiǎn)單性和線路效率: I2C 僅使用兩條線路(SDA(串行數(shù)據(jù)線)和 SCL(串行時(shí)鐘線))提供簡(jiǎn)單而高效的通信解決方案,而與總線上的設(shè)備數(shù)量無(wú)關(guān)。這種簡(jiǎn)單性降低了電路設(shè)計(jì)的復(fù)雜性,最大限度地減少
    發(fā)表于 11-27 07:49

    I2C的缺點(diǎn)介紹

    距離限制: I2C 主要設(shè)計(jì)用于單個(gè)電路板內(nèi)或位置較近的組件之間的短距離通信。總線的電容和上拉電阻的電阻限制了可實(shí)現(xiàn)的最大通信距離。隨著 SDA 和 SCL 線長(zhǎng)度的增加,總電容也會(huì)增加,從而導(dǎo)致
    發(fā)表于 11-27 06:10

    深入剖析I2C協(xié)議

    I2C是由Philips開(kāi)發(fā)的簡(jiǎn)單的雙向兩線總線,在深入淺出理解SPI協(xié)議中,我們區(qū)分了單工,半雙工,全雙工協(xié)議數(shù)據(jù)流向的區(qū)別,根據(jù)特征,I2C協(xié)議屬于半雙工協(xié)議(即同一時(shí)刻,數(shù)據(jù)單向流動(dòng))。此外
    的頭像 發(fā)表于 08-21 15:10 ?3689次閱讀
    深入剖析<b class='flag-5'>I2C</b>協(xié)議

    I2C總線通信,為什么要進(jìn)行電氣隔離?

    I2C總線采用雙向二線制,支持多主機(jī)多從機(jī)通信,具備高可靠性、抗干擾能力強(qiáng),廣泛應(yīng)用于嵌入式系統(tǒng)中。
    的頭像 發(fā)表于 08-11 11:04 ?2524次閱讀
    <b class='flag-5'>I2C</b><b class='flag-5'>總線</b>通信,為什么要進(jìn)行電氣隔離?

    第十六章 一文淺談I2C

    本篇文章介紹了W55MH32的I2C總線,其由SDA和SCL構(gòu)成,具設(shè)備尋址等特點(diǎn),協(xié)議含起始 / 停止信號(hào)等。闡述主從模式,介紹了相關(guān)例程,用于驗(yàn)證
    的頭像 發(fā)表于 05-28 16:07 ?1416次閱讀
    第十六章 一文淺談<b class='flag-5'>I2C</b>

    是德DSOX4034A示波器I2C總線信號(hào)分析

    在現(xiàn)代電子設(shè)計(jì)與調(diào)試中,I2C(Inter-Integrated Circuit)總線作為一種廣泛應(yīng)用的串行通信協(xié)議,因其簡(jiǎn)單性、靈活性和低功耗特性,成為許多嵌入式系統(tǒng)和電子設(shè)備中不可或缺的通信方式
    的頭像 發(fā)表于 03-19 13:47 ?1250次閱讀
    是德DSOX4034A示波器<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>信號(hào)分析

    I2C總線復(fù)用

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