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-09-20 14:29:36

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

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

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

【ARM】Linux驱动移植

1驱动模块移植过程 1模块的第一种编译方法改kconfig 2模块的第二种编译方法Makefile 2Linux驱动原理 0从哪里切入 1什么是注册 2register_chrdev提交哪些数据 21设备号为什么是231 22设备名随便给 23文件操作结构体怎么设置 什么是THIS_MODULE Opencloseread这些都好理解 3register_chrdev返回什么 31 简洁而高效的goto 32 还记得什么是三目运算符吗 33 返回0表示什么 34 什么情况下返回cd-major

在 mips 平台上wm8904 驱动移植

问题描述 在 mips 平台上wm8904 驱动移植 wm8904 在Linux 2.6.36这个版本上的驱动移植,音频接口是IIS,平台是mips MT7620,哪位大神移植过,帮帮忙 解决方案 我做过类似的,不过不是在mips MT7620上,你要源代码? 解决方案二: 您好,您是不是有这个源码啊?能给一份我吗?我的邮箱是1363519017@qq.com,谢谢!

AM335x(TQ335x)学习笔记——Nand&&网卡驱动移植

移植完成声卡驱动之后本想再接再励,移植网卡驱动,但没想到的是TI维护的内核太健壮,移植网卡驱动跟之前移植按键驱动一样简单,Nand驱动也是如此,于是,本人将Nand和网卡放在同一篇文章中介绍.介绍之前先感慨一下:TI的维护的内核真的很健壮,DTS真的很强大. 1. Nand驱动移植 阅读TQ335x的原理图可知,TQ335x的Nand连接到了GPMC上,且与DTS中默认的配置吻合,此处不做任何修改,详情如下: [cpp] view plaincopy nandflash_pins_s0: nan

linux驱动

知识结构: 1.    Linux驱动程序设计模式(40%)2.内核相关知识(30%)3. 硬件相关知识(30%)z 驱动分类:字符,网络,块 字符设备:以字节为最小单位,不可以乱序读写. 块设备: 一次传送一个整体数据(512字节),Linux可以以字节访问块设备(仅仅是驱动与内核的接口不同,访问的顺序的不同(字符只可顺序访问,块驱动可随机访问))   网络接口:硬件(eth0),纯软件(lo) 驱动的安装:模块,编译进内核(Linux启动的时候会自动加载init段) 使用驱动程序:字符设备文

《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动

6.4 使用多种方式测试Linux驱动 Android深度探索(卷1):HAL与驱动开发 在上一节已经实现了一个简单的Linux驱动程序,该驱动的功能是统计给定字符串中的单词数,并且在最后已经将该Linux驱动的源代码成功编译成动态Linux驱动模块word_count.ko.下一步就是测试该模块.测试的方法很多,最常用的就是直接在Ubuntu Linux中测试.当然,这对于本章实现的Linux驱动是没问题的,但是对于需要直接访问硬件的驱动在Ubuntu Linux上测试就不太方便.在这种情况下

AM335x(TQ335x)学习笔记——LCD驱动移植

TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由于TQ335x使用的芯片是AM335x,故仍然可以参考am335x-evm.dts.当然,am335x-evmsk.dts.am335x-beagbone.dts都可以.本文以am335x-evm.dts为例.大体上浏览下DTS文件,可以发现两个醒目的节点:一个是panel,一个是backlight

AM335x(TQ335x)学习笔记——GPIO按键驱动移植

还是按照S5PV210的学习顺序来,我们首先解决按键问题.TQ335x有六个用户按键,分别是上.下.左.右.Enter和ESC.开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题,但是浏览driver/input/keyboard目录时意外的发现了gpio-keys.c,大体上看下该驱动程序,其功能是实现了通用的gpio按键.再去看了下DTS,发现DTS中有对gpio-keys的引用,于是猜到,新的内核不需要自己编写输入子系统驱动,可以通过配置DTS直接解决按键问题.本人最

AM335x(TQ335x)学习笔记——WM8960声卡驱动移植

经过一段时间的调试,终于调好了TQ335x的声卡驱动.TQ335x采用的Codec是WM8960,本文来总结下WM8960驱动在AM335x平台上的移植方法.Linux声卡驱动架构有OSS和ALSA两种架构,目前最常用的架构是ALSA,本文也使用ALSA架构对WM8960驱动进行移植. ASoC是对ALSA驱动架构的进一步封装.ASoC将ALSA驱动中的各模块抽象为三部分:Platform.Codec和Machine.Platform主要是平台硬件驱动,包括SoC的IIS模块.DMA等,在本文中