国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術EM9170工控主板I2C總線介紹

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6107

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    I2C總線-通信線纜長度的影響及改進措施

    I2C總線確實不適合遠距離通信,尤其是需要使用線纜與I2C接口器件進行通信,這里的“不適合”并不是說不可以,這也是本文的重點。一般使用I2C總線
    發表于 01-21 06:03

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

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

    P82B715:I2C總線擴展的得力助手

    P82B715:I2C總線擴展的得力助手 在電子設計領域,I2C總線是一種常用的通信協議,但它的總線電容限制往往會影響實際通信距離和系統設計
    的頭像 發表于 12-26 10:20 ?710次閱讀

    基于FPGA的I2C控制模塊設計

    I2C_WRITE_WDATA.v模塊實現I2C寫時序,I2C_Controller (I2C控制器)例化了I2C_WRITE_WDATA.
    的頭像 發表于 12-26 09:48 ?4958次閱讀
    基于FPGA的<b class='flag-5'>I2C</b>控制模塊設計

    TCA39306雙向I2C總線和SMBus電壓電平轉換器技術解析

    TCA39306雙向I2C總線和SMBus電壓電平轉換器技術解析 在電子設計領域,電壓電平轉換是一個常見且關鍵的問題,特別是在涉及不同電壓標準的總線通信時。TCA39306作為一款雙路
    的頭像 發表于 12-17 10:00 ?384次閱讀

    I2C的SDA仲裁介紹

    I2C 支持 SDA 沖突檢測和仲裁,可以保證在多個主機企圖控制 I2C 總線時,I2C 總線上的數據不被破壞。每個主機發送數據時,都會同時
    發表于 12-16 06:25

    I2C總線協議

    I2C 總線使用兩根信號線(數據線 SDA 和時鐘線 SCL)在設備間傳輸數據。SCL 為單向時鐘線,固定由主機驅動。SDA 為雙向數據線,在數據傳輸過程中由收發兩端分時驅動。 I2C 總線
    發表于 12-15 08:07

    基于CW32 MCU的I2C接口優化穩定讀寫EEPROM關鍵技術

    CW32 MCU優化I2C接口,確保在與EEPROM芯片通信時的穩定性。內容涵蓋以下幾個關鍵技術點: I2C時序與頻率調整:介紹如何根據EEPROM的特性,合理設置
    發表于 12-03 07:29

    I2C的優點介紹

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

    I2C的缺點介紹

    距離限制: I2C 主要設計用于單個電路板內或位置較近的組件之間的短距離通信。總線的電容和上拉電阻的電阻限制了可實現的最大通信距離。隨著 SDA 和 SCL 線長度的增加,總電容也會增加,從而導致
    發表于 11-27 06:10

    深入剖析I2C協議

    I2C是由Philips開發的簡單的雙向兩線總線,在深入淺出理解SPI協議中,我們區分了單工,半雙工,全雙工協議數據流向的區別,根據特征,I2C協議屬于半雙工協議(即同一時刻,數據單向流動)。此外
    的頭像 發表于 08-21 15:10 ?3669次閱讀
    深入剖析<b class='flag-5'>I2C</b>協議

    I2C總線通信,為什么要進行電氣隔離?

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

    是德DSOX4034A示波器I2C總線信號分析

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

    STM32學習筆記_I2C詳解(可下載)

    I2C 是一種簡單的雙向二線制同步串行總線。它只需要兩根線即可在連接于總線 上的器件之間傳送信息I2C
    發表于 03-14 17:33 ?3次下載

    I2C總線復用

    帝晶智慧屏I2C總線復用
    的頭像 發表于 03-11 17:20 ?2087次閱讀