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...
voidi2c_scl(structi2c *i2c,intbit) { gpio_direction_output(i2c->scl, bit); } data动作函数 这里需要注意的是,当i2c master想要让data为高,是把data的gpio设置为输入,这是因为SCL和SDA都是默认硬件上拉的。同时也是为了master写完数据以后去获取ACK。 voidi2c_sda(structi2c *i2c,intbit) {if(bit) { ...
来看这个具体的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;...
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...
如果你正在使用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 ...
开漏输出:仅通过N-MOS管导通输出低电平,高电平需依赖外部上拉电阻,支持电平转换和总线“线与”特性,适用于多设备通信(如I2C)。 在不同场景可以选择不同的工作模式: 推挽:需直接驱动LED、继电器等数字器件。 开漏:需兼容不同电平系统(如5V器件)或多设备总线通信。
i2c.c#include <stdio.h> #include "dri_simulate_i2c.h" #include "dri_timer.h" /*** 函数名称 : I2C_Delay 功 能: I2C时序延时参 数:无返回值:无作 者: ***/ static void dri_i2c_delay(void) { dri_timer_delay_us(DRI_I2C_SPEED_DATA) } /*** 函数名称...
I2C_SDA = P1^1; //控制24c02的SDA引脚 sbit I2C_SCL = P1^2; //控制24c02的SCL引脚 void I2C_Delay10us()//IIC协议所需:延迟10us函数 { uchar a, b; for(b=1; b>0; b--) { for(a=2; a>0; a--); } } void I2C_Start() //开始启动IIC,IIC协议头 { I2C_SDA = 1; I2C_...