色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    6086

    瀏覽量

    35497
收藏 人收藏

    評論

    相關推薦

    I2C總線的優缺點分析

    I2C總線作為一種廣泛使用的串行通信協議,以其簡單性和高效性在嵌入式系統中占據著重要地位。 I2C總線的優點 1. 簡單性和低成本 I2C
    的頭像 發表于 01-17 15:50 ?79次閱讀

    I2C總線與Arduino的接口示例

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

    I2C總線的工作模式介紹

    在現代電子系統中,I2C總線作為一種多主機、多從機的串行通信協議,扮演著至關重要的角色。它允許多個設備共享同一總線,進行數據傳輸,從而簡化了系統設計并降低了成本。 I2C
    的頭像 發表于 01-17 15:32 ?90次閱讀

    I2C總線協議詳細解析

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

    I2C總線故障排除技巧

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

    I2C總線與單片機的連接

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

    I2C總線應用實例分析

    在現代電子系統中,I2C總線因其簡單、靈活和高效的特點而被廣泛應用于各種設備之間的通信。 I2C總線概述 I2C
    的頭像 發表于 01-17 15:09 ?114次閱讀

    I2C總線與SPI總線的比較

    在現代電子系統中,微控制器與各種外設之間的通信是必不可少的。I2C和SPI是兩種流行的串行通信協議,它們各自具有獨特的特點和應用場景。 I2C總線 I2C是一種多主機、多從機的同步通信
    的頭像 發表于 01-17 15:08 ?119次閱讀

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

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

    詳解I2C總線與SPI總線的區別

    I2C(Inter-Integrated Circuit)表示集成電路互連,是一種用于線路板內部芯片之間通信的總線。
    的頭像 發表于 10-16 15:16 ?5794次閱讀
    詳解<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>與SPI<b class='flag-5'>總線</b>的區別

    了解I2C總線

    電子發燒友網站提供《了解I2C總線.pdf》資料免費下載
    發表于 10-08 11:13 ?2次下載
    了解<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>

    I2C總線技術特性介紹

    在現代電子技術領域,通信協議是構建智能設備互聯互通的基石。I2C總線作為其中的一種重要協議,由飛利浦公司研發,它以其簡潔高效的通信方式廣泛應用于電子設備之間的短距離數據傳輸。 I2C
    的頭像 發表于 09-09 17:11 ?355次閱讀

    I2C總線協議的工作原理和尋址格式

    等特點,在嵌入式系統設計中得到了廣泛應用。本文將詳細介紹I2C總線協議的工作原理和尋址格式,幫助讀者深入理解該協議。
    的頭像 發表于 05-27 15:47 ?1901次閱讀
    主站蜘蛛池模板: 人妻激情综合久久久久蜜桃| 免费视频久久只有精品| 久久国产精品二区99| 色色色久久久免费视频| 99久久久A片无码国产精| 久久综合老色鬼网站| 一本大道无码AV天堂欧美| 国产亚洲精品在浅麻豆| 性夜夜春夜夜爽AA片A| 高清欧美videos sexo| 日美一级毛片| 国产精品1卡二卡三卡四卡乱码| 日韩综合网| 久草青青在线| 在线免费视频a| 久久精品国产99欧美精品亚洲 | 魅男mangay| 99国产福利| 人人碰79免费视频| 果冻传媒2021精品影视| 亚洲日韩KKK444KKK聚色| 久久精品热老司机| 13一18TV处流血TV| 暖暖 免费 高清 日本视频大全| 97超视频在线观看| 青青青手机视频| 国产成人免费观看在线视频| 少妇高潮A视频| 快播苍井空| 国产亚洲精品久久777777| 亚洲午夜久久久精品电影院| 久久国产精品自线拍免费| 把内衣脱了把奶露出来| 我把寡妇日出水好爽| 国产小视频在线高清播放| 99精品视频| 一本色道久久综合亚洲精品| 色www精品视频在线观看| 韩国黄色影院| 94vvv男人的天堂| 亚洲精品久久久久无码AV片软件|