中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

I2C總線介紹及AT24C02驅動編寫筆記-創新互聯

中斷處理程序

為蘆山等地區用戶提供了全套網頁設計制作服務,及蘆山網站建設行業解決方案。主營業務為成都網站建設、成都做網站、蘆山網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

 {

     清除中斷

     硬件自動清除

     軟件清除

}

CPU芯片手冊相關章節

————————

I2C

CPU外接設備的方式

 1)GPIO簡潔的方式(按鍵,LED)

   通過設置GPIO管腳的狀態來完成通信(控制)

        gpccon

        gpcpud

        gpcdat

2)類似于內存的接口 (DDRAM norflash nand dm9000)

       從硬件上看CPU和芯片 數據線 地址先  BANK

    3)協議類接口

        uart

        I2C

            AT24C02    EEPROM

          3,如何解決CPU和設備通信的問題

               I2C通信協議:定義:兩線式串行總線   SCL:時鐘線 SDA:數據線

               通信過程中使用到的信號

                    start:處于高電平  在SCL處于高電平SDA有個下降沿;

                    stop:處于低電平  在SCL處于高電平SDA有個上升沿;

                    ACK:  應答信號,在SCL處于高電平SDA為低電平時;

                    在SCL可以變數據,在SCL為高不能改變SDA

          I2C通信特點

              I2C通信過程中,設備之間有主從之分。

              在開發板上I2C總線上的主設備就是CPU(可配置)

               掛在I2C總線上的其他 芯片統統是從設備

            I2C通信的發起者肯定是主設備

               I2C總線上的每個從設備都有一個固定的地址。

             I2C總線介紹及AT24C02驅動編寫 筆記

4.EEPROM驅動開發

  AT24C02容量,結合原理圖,找到開發板上的地址,如何寫(讀)一個字節到該芯片

 2Kbits   256字節      1010xxxx

  寫

   start信號

    7位地址+w

   等待應答

   word address:發送要寫入的地址

   等待應答

   發送即將寫入的數據

   等待應答

   產生信號

讀:

   START信號

   從設備地址+w

   等待信號

   start信號

   發從設備內存地址—R

   等待ACK

   接收從設備發送的字節的數據

   第九周期兩種方式:回復ACK   第10周期 從設備繼續發送下一個存儲的數據

                     不發ACK   第10周期設備休息

   主設備  STOP

  cpu里有個I2C core.c

          我們要做的就是實現device   i2c_client

                             i2c_new_device  在鏈表加上節點

device_driver  i2c_driver     i2c_add_driver  在鏈表添加節點

  然后調用下match函數執行probe函數   再通過I2C協議完成CPU和芯片的通信

  AT24C02驅動程序

   按照總線驅動模型來寫

     實現一個i2c_client  和

     i2c_driver

    {

          要訪問AT24C02

          調用I2C控制器啟動程序(數據交互)

        }

      I2C控制器的驅動程序(內核中已實現了)

         send

         recv

AT24C02程序

  添加i2c_cliend

   Documentation\i2c\instantiating-devices

    vi arch/arm/mach-xxxxxx/mach-xxxxx.c

     static stuct i2c_board_info i2c_at24cxx[] =

    {

      {I2C_BOARD_INFO("at24cxx",0x50)

},

};

c參數1:名稱   參數二:從設備地址

i2c_register_board_info(0,i2c_at24cxx,ARRAY_SIZE(i2c_at24cxx));

解釋:0:cpu的I2C不止一個,也就是有很多i2c接口,看原圖看看它掛在哪個接口  才確定是幾

2)添加driver

i2c_transfer()i2c收發數據函數

AT24C02模塊主要程序:

#include <linux/i2c.h>

#include <linux/uaccess.h>

dev_t dev;

struct艾24cxxx_dev

{

 struct cdev cdev;

struct i2c_client *client;

}

struct class *dev_class = NULL;

struct device dev_device NULL;

struct at24cxx_dev *at24cxx_devp =NULL;

static int xxxxxx_prob (struct i2c_client *client,const struct i2c_device_id *id)

{

  申請設備號

alloc_chrdev_region(&dev,0,"xxxxx");

申請cdev空間

at24cxx_devp =kzalloc(sizeof(struct at24cxx),GFP_KERNEL);

at24cxx_devp->client =clirnt;

初始化cdev并添加到內核

cdev_init(&at24cxx_devp->cdev,&ar24cxx_fops);

cdev_add(at24cxx_devp->cdev,dev,1);

 創建設備節點文件

dev_class-class_create(THIS_...,"AT24CXX");

dev_device = device_create(dev_class,NILL,dev

NULL,"AT24CXX0");

}

int at24cxx_remove(struct i2c_client *client)

{

     device_destroy()dev_class,dev);

     class_destroy(dev_class);

cdev_del(&at24cxx_devp);

kfree(at24cxx_devp);

unregister_chrdev_region(dev,1);

return 0;

}

static size_t at24cxx_write(struc file *file,char __user buf,size_size,loff_t *offset)

{

     unsigned char val[2];

    struct i2c_msg msg[1];

    int ret =0;

    if(size ! -2)

     {

       return -1

        }

     copy_from_user(。。。);

msg[0].add=at24cxx->client->addr//從設備地址

msg[0].flags=0;//寫入

msg[0].buf =val;//數據

msg[0].len =2;

//START ....ADDR+W    ACK    offset  ACK  val   ACK

i2c_transfer(  ar24cxx_devp->client->adapter,msg,1);//內核創建的adapter  在

                                            //i2c_register_board_info()中;

return 2;

}

static  ssize_t xxxx_read(struc file *file,char __user buf,size_size,loff_t *offset)

{

     unsigner char address;

     unsigned char data;

      struct i2c_msg msg[2];

     int ret;

     ret = copy_form_user(&address,buf,1);

msg[0].addr=at24cxx_devp->client->addr;

msg[0]=flags = 0;

msh[0].buf=&address;

msh[0].len =1;

msg[0].addr=at24cxx_devp->client->addr;

msg[0]=flags = 1;//讀信號

msh[0].buf=&data;

msh[0].len =1;

     i2c_transfer(  ar24cxx_devp->client->adapter,msg,ARRAY_SIZR(msg));//內核創建的adapter  在

                                            //i2c_register_board_info()中;

ret =cop_to_user();

}

struct filr_operations at24cxx_fops =

{

     .owner = ....,

     .read = at24cxx_read,

     .write = at24cxx_write,

}

const struct  i2c_device_id id_table[] =

{

    {"at24cxx",0},

      { }//結束標志

}

struct i2c_driver at24cxx_driver =

{

     .driver=

      {

          .name="AT24C02"

          .owner=...

       },

       .probe = xxxxxxxxxx,

       .remove = xxxxxxxxxx,

       .id_table = at24cxx_id    //i2c match 會使用到,來匹配能支持那些設備

};

__int

     i2c_add_driver(&at24cxx_driver);

__exit

       i2c_del_driver(&at24cxx_driver);

測試程序:

     #include <stdio.h>

     #include <stdlib.h>

     #include <string.h>

     #include <sys/typer,h>

     #include <sys/stat.h>

     #include <fcntl.h>

void print_rsage(char*file)

{

      printf("%s r addr\n"file);

      printf(% w addr val\n,file);

}

int main (int argc , char **argv)

{

     int fd;

     unsigned char buf[2];

     if(argc!=3 &&argc!=4)

{

      print_usage(argv[0]);

      return -1;

}

fd=open(/dev/ar24cxx0",O_RDWR)

if(strcmp(argv[1],"r")==0)

{

   buf[0]=strtoul(artoul[2],NULL,0);

   read(fd,buf,1);

   peintf(data %c %s 0x%2x\n,buf[0]....);

}

else if(sstrcmp(argv[1],"w")==0)

{ buf[0]=strtoul(artoul[2],NULL,0);

buf[1]=strtoul(artoul[3],NULL,0);

write(fd,buf,2);

}

else

{

 print_usage(argv[0]);

return -1

}

return 0;

}

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文題目:I2C總線介紹及AT24C02驅動編寫筆記-創新互聯
網站地址:http://m.2m8n56k.cn/article38/pgopp.html

成都網站建設公司_創新互聯,為您提供外貿網站建設網站維護營銷型網站建設搜索引擎優化軟件開發定制開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設
主站蜘蛛池模板: 国内精品久久久久久野外 | 欧美一做特黄毛片 | 精品一区二区在线欧美日韩 | 亚洲天堂久久 | 九九视频在线播放 | 色偷偷亚洲第一成人综合网址 | 中文字幕日本不卡 | 中文字幕亚洲天堂 | 在线精品视频免费观看 | 国产情侣无套精品视频 | 国产一级做a爱免费观看 | 欧美成人短视频 | 青青草国产免费一区二区 | 亚洲乱强 | 国产不卡a | 欧美一级一毛片 | 国产中文久久精品 | 国产成a人亚洲精v品久久网 | 国产伦久视频免费观看视频 | 久久免费久久 | 国产精品久久久久网站 | 成人综合在线视频免费观看 | 亚洲成a人片在线观看中 | 国产成人欧美一区二区三区的 | 欧美特一级| 亚洲免费在线 | 国内精品久久精品 | 国产精品成人免费视频 | 色综合久久88色综合天天 | 国产成人精品亚洲77美色 | 欧美性色黄大片www 欧美性色黄大片一级毛片视频 | 国产性较精品视频免费 | 午夜在线社区视频 | 一级特黄特色的免费大片视频 | 日韩免费一级毛片 | 日产日韩亚洲欧美综合搜索 | 成人免费真人毛片视频 | 日本韩国台湾香港三级 | 成人免费观看www在线 | 欧美一级淫片a免费播放口aaa | 99久久精品免费看国产四区 |