这就是开漏输出在IIC通信中的另一个作用。 SDA是高电平, 说明主设备A可以占用总线, 然后主设备A将SDA拉低, 开始通信。 SDA是低电平, 说明有人已经捷足先登了, 主设备A不能占用总线, 结束通信。 因此,模拟IIC一定要将GPIO端口设置为开漏输出并加上上拉电阻,硬件IIC会自动配置为开漏输出。 审核编辑:汤梓红...
GD32 GPIO模拟IIC Demo GD32 GPIO模拟IIC gpio模拟pwm 一丶简介 平台:msm8953 (android) 环境: ubuntu-16.04 二丶步骤 ① 修改设备树,添加pwm节点: 位置:kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953-mtp.dtsi 在soc中添加节点,如下: gpio-demo { compatible = "gpio-demo"; gpios = <&tlmm 33...
GPIO模拟IIC接口信号质量分析 信号质量有问题的波形001: 信号质量有问题的波形002: 从上图可以看出,GPIO口模拟的I2C接口,电平都存在半高的情况。 因为I2C的接口是通过GPIO模拟实现的,该时钟信号线SCL内部默认为下拉状态,因而SCL对应的GPIO内部有下拉电阻,导致在输出为高电平时,上升沿慢的台阶出现。后把SCL脚的内部下...
STM32CubeMX配置gpio模拟IIC 关于STM32 GPIO的配置等问题 一、GPIO的基本结构图示 二、模式 直接上图: 图表数据解析: 三、配置等问题 问题 一、GPIO的基本结构图示 提示:图片来自STM32中文参考手册P176 STM32英文参考手册也有内容无差别 二、模式 我们搜索的大多数资料显示的都是有8种模式;输入4种输出4种。但今...
1 #include "iic.h" 2 3 void IIC0_Delay(u32 count) 4 { 5 for(uint32_t i= count*3;i>0;i--){} 6 //Sys_HardDelayUs(count); 7 //rt_thread_mdelay(1); 8 } 9 void SCL0_OUT(void) 10 { 11 gpio_init(GPIOB, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_8); 12 }...
IIC_timeout(GET_SDA_DAT)) {goto IIC_TOUT;} //等待数据拉低#define IIC_SLAVE_SEND_LOW WAIT_IIC_SCL_LOW; SDA_OUT; SET_SDA_LOW; WAIT_IIC_SCL_HIGH;#define IIC_SLAVE_SEND_HIGH WAIT_IIC_SCL_LOW; SDA_OUT; SET_SDA_HIGH; WAIT_IIC_SCL_HIGH;#define IIC_SLAVE_SEND_ACK IIC_SLAVE_SEND...
下图为失败时i2c波形,由波形可看出主机端发送完i2c从端地址0x38后,从端未响应。 下面我们再看一下写成功时候的波形,由波形可看出i2c主机端发送从端地址0x38后,从端有ACK, 主机端继续发送要写入的寄存器地址0xA5, 从端ACK; 主机端继续发送写入寄存器的值0x03, 从端ACK。通信完成。
IIC协议正确,但是一直读取失败,最后发现因为没配置GPIO为开漏输出。 推挽输出和开漏输出 推挽输出: 输出逻辑0,则N-MOS激活; 输出逻辑1,则P-MOS激活。 开漏输出: 在不接上拉电阻时, 输出逻辑0,则N-MOS激活; 输出逻辑1,P-MOS不会激活, 不会输出高电平。
SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备...