I2C_delay(); #else _OUT();//sda输出 _SCL=0; IICSDA=0;/STOP:when CLKis highDATA change lowto high Delayus(I2CDelayus); IIC_SCL=1; IIC_SDA=1;/发送IIC总线结束信号 Delay_us(I2C_Delayus); #endif } /********* * Function Nam
Delay_us(I2C_Delayus); IIC_SDA=0;//START:when CLK is high,DATA change form high to low Delay_us(I2C_Delayus); IIC_SCL=0;//钳住 IIC 总线,准备发送或接收数据 #endif } //*** //IIC 停止信号 //*** void IIC_Stop(void) { #ifdef BMI160 SCL_L; I2C_delay( SDA_L; I2C_delay...
i2c-gpio.c它是gpio模拟I2C总线的驱动,总线也是个设备,在这里将总线当作平台设备处理,那驱动当然是平台设备驱动,看它的驱动注册和注销函数 static int __initi2c_gpio_init(void){int ret;ret=platform_driver_register(&i2c_gpio_driver);if(ret)printk(KERN_ERR"i2c-gpio:probe failed:%d\n",ret);returnret...
1、linux gpio 模拟 i2c 的使用用 GPIO 模拟 I2C 总线这个结构专门用于数据传输相关的 addr 为 I2C 设备地 址, flags 为一些标志位, len 为数据的长度, buf 为数据。 这里宏定义的一些标志还是需要了解一下。I2C_M_TEN 表示 10 位设备地址I2C_M_RD 读标志I2C_M_NOSTART 无起始信号标志I2C_M_IGNORE_NAK...
gpio模拟i2c驱动 该程序可以作为gpio模拟i2c程序的参考。不同的平台,函数实现不同,但是i2c通信的时序和原理是相同的。希望对一些朋友有帮助。 复制代码 1 #include<linux/init.h> 2 #include<linux/module.h> 3 #include<linux/kernel.h> 4 #include<linux/sched.h>...
来看这个具体的i2c_outb函数 [html] view plaincopyprint? 1.1. static int i2c_outb(struct i2c_adapter *i2c_adap, unsigned char c) 2.2. { 3.3. int i; 4.4. int sb; 5.5. int ack; 6.6. struct i2c_algo_bit_data *adap=i2c_adap->algo_data;...
0 : i2c_adap->retries; if (flags & I2C_M_TEN) { /* a ten bit address */ addr = 0xf0 | ((msg->addr >> 7) & 0x03); bit_dbg(2, &i2c_adap->dev, "addr0: %d\n", addr); /* try extended address code...*/ ret = try_address(i2c_adap...
如果你正在使用Occidentalis,那你的小派已经配置好I2C接口了,如果你使用Raspbian,你需要打开LXTerminal终端窗口并且输入下面的命令: 1 sudonano/etc/modules 并且在文件末尾添加下面两行: 1 2 i2c-bcm2708 i2c-dev 编辑完成后,你需要重启来使改动生效。 如果在Raspbian上你的I2C有问题,那最好升级到最新版本。这篇教程...
void I2C_Stop(void){ SDA_OUT;SCL_L;//SCL = 0 SDA_L;//SDA = 0 myDelay;SCL_H;//SCL ...
开漏输出模式一般应用在I2C、SMBUS 通讯等需要“线与”功能的总线电路中。还可以用在电平不匹配的场合中...