在tiny4412底板集成了重力传感器mma7600
这是一款三轴加速度传感器以及角速度传感器(陀螺仪)
linux内核中以及为我们写好了驱动代码,现在我们卸载该驱动然后写一个属于我们自己的mma7600驱动,mma7600该芯片支持的通信协议有很多,目前主流的都是使用IIC协议
阅读这篇文章需要有一点的IIC,驱动框架,输入子系统作为知识铺垫
我们就不介绍IIC协议的通信原理了,不了解的童鞋可以在CSDN上搜索
下图是mma7600的底板图
从图中可以知道,
我们使用的是i2cSDA3以及i2cSCL3,还有一个外部中断XEINT25
通过电路连接查询可以找到相应的寄存器GPA1_2,GPA1_3,GPX3_1
tiny4412有自带的驱动,现在一般都是采用设备树形式配置从设备节点,但是可以作为我们的参考,在arch/arm/mach-exynos/mach-tiny4412.c中包含了mma7660的板级信息。
#include <linux/mma7660.h>
static struct mma7660_platform_data mma7660_pdata = {
.irq = IRQ_EINT(25),
.poll_interval = 100,
.input_fuzz = 4,
.input_flat = 4,
};
#endif
static struct s3c2410_platform_i2c tiny4412_i2c3_data __initdata = {
.flags = 0,
.bus_num = 3,
.slave_addr = 0x10,
.frequency = 200*1000,//频率200kHz
.sda_delay = 100,
};
static struct i2c_board_info smdk4x12_i2c_devs3[] __initdata = {
#ifdef CONFIG_MXC_MMA845X
{
.type = "mma845x",
.addr = 0x1D, /*mma845x i2c slave address*/
.platform_data = (void *)&mma845x_data,
},
#endif
#ifdef CONFIG_SENSORS_MMA7660
{
I2C_BOARD_INFO("mma7660", 0x4c),
.platform_data = &mma7660_pdata,
},
#endif
};
可以看出从机mma7600的地址是0x4c,I2c3的频率是200kHz,