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;
    }
  • 相关阅读:
    作业12:字典dict讲解及增删改查等操作
    作业11:元祖及元祖的嵌套
    作业10:列表的嵌套
    作业09:列表的增删改查
    什么数据类型
    作业08:字符串操作
    Visual Studio Code 写Python 代码
    Python——面向对象(初级篇)
    Python 学习第三部分函数——第一章函数基础
    Python3 字典
  • 原文地址:https://www.cnblogs.com/d442130165/p/5292400.html
Copyright © 2011-2022 走看看