zoukankan      html  css  js  c++  java
  • [国嵌攻略][156][I2C自编设备驱动设计]

    AT24C08的驱动在Linux内核中已经提供,在/drivers/misc/eeprom/at24.c文件中。在对应的probe函数中有一个创建/sys/.../eeprom文件的函数,应用程序通过调用/sys/.../eeprom设备文件来对设备进行读写操作。

    移植AT24C08驱动

    1.修改内核注册eeprom设备

    在kernel/linux-mini2440/arch/arm/mach-s3c2440.c中的machine_init下注册IIC设备。

    mach-mini2440.c

    static struct at24_platform_data at24c08 = {
        .byte_len = 8192 / 8,   //字节长度
        .page_size = 8,         //每页大小
        .flags = 0
    };
    
    static struct i2c_board_info __initdata mini2440_i2c_devices[] = {
        {
            I2C_BOARD_INFO("24c08", 0x50),   //"24c08"表示型号,0x50表示地址
            .platform_data = &at24c08
        }
    };
    
    static void __init mini2440_machine_init(void){
        i2c_register_board_info(0,mini2440_i2c_devices,ARRAY_SIZE(mini2440_i2c_devices));
    }

    2.配置内核支持eeprom驱动

    make menuconfig ARCH=arm

    device drivers->[*]misc devices->eeprom support->

    <*>i2c eeproms form most venders->exit->save

    make uImage ARCH=arm CROSS_COMPILE=arm-linux-

    3.下载内核到开发板

    /sys/bus/i2c/devices/0-0050/eeprom文件就是内核注册的eeprom设备文件。0x50对应0-0050文件夹,24c08对应eeprom文件。

    i2capp.c

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    
    int main(int argc, char **argv){
        //打开文件
        int fd;
        
        fd = open("/sys/bus/i2c/devices/0-0050/eeprom", O_RDWR);
        if(fd < 0){
            printf("error
    ");
            return -1;
        }
        
        //写入数据
        int i;
        unsigned char wrData[10];
        
        for(i = 0; i < 10; i++){
            wrData[i] = i;
        }
        
        lseek(fd, 0, SEEK_SET);
        write(fd, wrData, 10);
        
        //读取数据
        unsigned char rdData[10];
        
        lseek(fd, 0, SEEK_SET);
        read(fd, rdData, 10);
        
        for(i = 0; i < 10; i++){
            printf("%d ", rdData[i]);
        }
        printf("
    ");
        
        //关闭文件
        close(fd);
        
        return 0;
    }
  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/d442130165/p/5292400.html
Copyright © 2011-2022 走看看