I.MX6 SHT20 Linux 驱动移植

/***********************************************************************
 *                     I.MX6 SHT20 Linux 驱动移植
 * 说明:
 *     本来打算使用SHT10来做湿度检测,发现其并不是I2C接口,当然也使用
 * GPIO能获取到相关数据了,不过由于不小心将其烧坏了,所以换成SHT20。
 *
 *                                     2016-10-10 深圳 南山平山村 曾剑锋
 **********************************************************************/

一、参考驱动:
    Android_Native_Service_SHT20Demo
        https://github.com/HowardLin/Android_Native_Service_SHT20Demo/blob/master/SHT20_Module_1.2/sht20_driver/sht20.c#L126

二、驱动修改:
    static s32 sht20_get_id(struct i2c_client *client, u8 serial[8])
    {
        s32 result;
        u8 serialA[8];
        u8 serialB[6];

        u8 command1[2] = {0xFA, 0x0F}; /* Read from memory location 1 */
        u8 command2[2] = {0xFC, 0xC9}; /* Read from memory location 2 */

        struct i2c_msg get_serial_number_msg1[2] = {
            {
                .addr = client->addr,
                .flags = ~I2C_M_RD,
                .len = 2,
                .buf = command1,
            },
            {
                .addr = client->addr,
                .flags = I2C_M_RD,
                .len = 8,
                .buf = serialA,
            },
        };
        result = i2c_transfer(client->adapter, get_serial_number_msg1, 2);

        struct i2c_msg get_serial_number_msg2[2] = {
            {
                .addr = client->addr,
                .flags = ~I2C_M_RD,
                .len = 2,
                .buf = command2,
            },
            {
                .addr = client->addr,
                .flags = I2C_M_RD,
                .len = 6,
                .buf = serialB,
            }
        };
        result = i2c_transfer(client->adapter, get_serial_number_msg2, 2);

        // printk(KERN_INFO "%x %x %x %x %x %x %x %x", serialB[3], serialB[4], serialA[0], serialA[2], serialA[4], serialA[6], serialB[0], serialB[1]);

        serial[0] = serialB[3];
        serial[1] = serialB[4];
        serial[2] = serialA[0];
        serial[3] = serialA[2];
        serial[4] = serialA[4];
        serial[5] = serialA[6];
        serial[6] = serialB[0];
        serial[7] = serialB[1];

        return result;
    }
时间: 2024-10-02 10:16:36

I.MX6 SHT20 Linux 驱动移植的相关文章

I.MX6 AW-NB177NF WIFi 驱动移植问题

/******************************************************************************** * I.MX6 AW-NB177NF WIFi 驱动移植问题 * 说明: * 之前驱动移植,但看不到有wlan设备产生,于是感觉是wifi驱动出了问题,于是开始 * 分析厂家提供的wifi驱动,发现id对应的信息不对,经过与FAE确认之后并验证,确实是 * 这个问题导致的. * * 2016-6-20 深圳 南山平山村 曾剑锋 ***

linux驱动移植(nand,yaffs2)

原文:http://blog.sina.com.cn/s/blog_7090b8670101b0bi.html linux驱动移植(nand,yaffs2) 在linux操作系统的顺利移植之后,linux的内核虽然在板子上跑了起来,但是此时linux还不支持板子的的各个硬件,比如说lcd,摄像头,声卡,usb等模块,我们必须要在板子上装入驱动程序后,才能上这些硬件在linux操作系统下工作. 这些驱动在内核中都有驱动的源码,我们要做的就是将这些驱动源码编译到内核中,当然在编译之前是需要对驱动源码

linux驱动移植step by step

驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件, 而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接口是已定义好的,我们需要实现这些接口)而无需自己定义接口,这样既能正确的控制设备. 又能很好的维护(如果需要升级驱动,上边的应用程序不需要改变) 驱动分类: 字符设备:能够像字节流(类似文件)一样被访问的设备(至少实现open, close, read ,write等功能) 快设备:    用户空

linux网卡驱动移植

这里重要的是物理层PHY receiver,MAC(media access control)层,这里与软件中的协议栈不同,在硬件上MAC是PHY的下一层.DM9000A将MAC和PHY做到一起,也可以像IIS设备那样,SOC内有IIS的控制器,而声卡UDA1341放在片外.网卡当然也有这种设计,它是把PHY的下层MAC放入SOC内,片外的是PHY,当然我暂时还没见过这种的.DM9000A的输入是并行的总线,可以和CPU直接IO.而IIS那种需要通过:CPU CORE BUS->I2S控制器->

Linux开源模块移植概述暨交叉编译跨平台移植总结--摘自《嵌入式Linux驱动模板精讲与项目实践》

本文摘自<嵌入式Linux驱动模板精讲与项目实践>一书中的"开发与调试技巧". Linux的强大威力就在于有很多开源项目可以使用,通常很多需求可以通过寻找相关的开源模块做为快速解决方案.要把这些开源模块应用到嵌入式中,其中一个关键点就是要使用交叉编译工具对开源项目进行交叉编译. 根据具体情况,下载的开源项目在组织上有很多情况,在此对各种情况进行归类介绍. 1. 下载的开源软件包找不到Makefile 对于这种开源包通常是采用configure的方式组织的,那么第一步就是使用

Linux声卡驱动移植和测试

一.分析驱动程序,根据开发板修改代码 代码太长,就不贴了,几个注意点: 1. 查看开发板原理图和S3C2410的datasheet,UDA1341的L3MODE.L3DATA.L3CLOCK分别与S3C2410的GPB2.GPB3.GPB4相连,IISLRCK=GPE0, IISSCLK=GPE1, CDCLK=GPE2,IISSDI=GPE3, IISSDO=GPE4,部分代码如下: 2. 两个重要结构体:audio_buf_t和audio_stream_t,其中audio_stream_t

【Linux驱动】TQ2440 DM9000E网卡驱动移植(Linux-2.6.30.4)

花了一天的时间研究了一下Linux-2.6.30.4版本号内核下关于TQ2440 DM9000E的网卡驱动移植.总结一下自己的收获. 事实上.在Linux-2.6.30.4版本号内核下有关于网卡驱动,可是这个网卡驱动不是针对于 DM9000E.而是针对于 DM9000的. 因此要在此基础之上改动一些參数.而且打上必要的相关代码.这个网卡驱动移植是參照了"天嵌科技出品-Linux移植之Step By Step_V4.6"的文档.但就是这样.还是花费了将近一天的时间.事实上这里的难点在于:

Linux开源模块迁移概述暨交叉编译跨平台移植总结--从《嵌入式Linux驱动模板简洁和工程实践》

本文摘录<嵌入式Linux驱动模板简洁和工程实践>一本书"开发和调试技术". Linux强大的是,有那么多的开源项目可以使用.通常非常需要可以通过寻找相关的源模块被定义为高速的解决方案.使这些开源模块的嵌入.对开源项目进行交叉编译. 依据详细情况.下载的开源项目在组织上有非常多情况,在此对各种情况进行归类介绍. 1. 下载的开源软件包找不到Makefile 对于这样的开源包一般是採用configure的方式组织的,那么第一步就是使用软件包中的configure生成Makef

【转】 linux内核移植和驱动添加(三)

原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED驱动的添加 1, 将led.c驱动文件拷贝到linux-3.1.4/drivers/char/目录下 [email protected]# pwd /change/linux-3.1.4/drivers/char [email protected]#  cp /mnt/hgfs/fh/driver/