首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
gpio模拟uart
2024-09-06
通用GPIO模拟串口,提供源代码,本人经过测试OK(第一版)
--------------------------serial.h------------------------------------------ #ifndef _SERIAL_H_ #define _SERIAL_H_ #define my_board #ifdef my_board //只需修改这里,就可移植到STM32等多种支持定时器的单片机中. void rx_timer_inter(void); void tx_timer_inter(void); void init_time
S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动
目录:一. 说明 二. 驱动程序说明及问题 三. 案例一 四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看发板,读写都行:通过增加一些调试信息,对linux i2c驱动其中的编写方法之一有了一定了解,在我的另外一篇博文有详细说明.但同时对在linux下GPIO模拟i2c产生了兴趣,于是就写这篇博文来记录驱动编写过程中遇到的问题.如果想了解了i2c时序,请google或百度一下. 本篇博文通过misc驱动
GPIO模拟IIC接口信号质量分析
信号质量有问题的波形001: 信号质量有问题的波形002: 从上图可以看出,GPIO口模拟的I2C接口,电平都存在半高的情况. 因为I2C的接口是通过GPIO模拟实现的,该时钟信号线SCL内部默认为下拉状态,因而SCL对应的GPIO内部有下拉电阻,导致在输出为高电平时,上升沿慢的台阶出现.后把SCL脚的内部下拉disable之后,测试的波形如下图所示,从下图可以看出SCL时钟信号已经正常. 但是SDA存在小的脉冲尖峰和ACK的半高情况.具体见图中的红色圈所示. SDA小的脉冲尖峰出现在read_
GPIO模拟串口注意是事项
GPIO模拟串口需要注意的事项如下:(程序见我的博客第一篇) 1.由于串口是异步通信,则串口发送必须满足宽度要求. (1)假设串口的波特率是9600bps(1s传输9600个bit),则传输1bit需要1/9600s. (2)由第(1)点可以得出,串口发送数据时,位与位之间的时间必须满足1/9600+/-误差.(此误差应该由串口接收器决定) (3)在发送一个Byte内,最好关闭中断. (4)满足(1).(2).(3)点,能保证GPIO模拟串口发送正常. 2.对于串口数据采集,由采样定理得,采样频
STM32F207 两路ADC连续转换及GPIO模拟I2C给MT9V024初始化参数
1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯片,是I2C是8位宽的,而镁光的地址是8位,而数据位是16个字节, 其实不管是8位还是16位,每次发送都是8个字节然后一个应答位,所以只要稍微改下代码即可. 3.实现两路ADC连续转换,两路ADC转换:一路是检测锂电池电压:一路是检测压力传感器,其实都是检测电压,当检测到压力为零,并累计多长时间后进
GPIO模拟SPI
上次用gpio模拟i2c理解i2c协议.相同的,我用gpio模拟spi来理解spi协议. 我用的是4线spi,四线各自是片选.时钟.命令/数据.数据. 数据在时钟上升沿传递,数据表示的是数据还是命令由命令/数据线决定. 開始条件: void spi_start(void) { gpio_config(GPIO_CS, GPIO_OUTPUT); udelay(SPI_SPEED_DURATION); gpio_set(GPIO_CS, 0);/* start condition */ udela
linux SPI驱动——gpio模拟spi驱动(三)
一:首先在我的平台注册platform_device,保证能让spi-gpio.c能执行到probe函数. 1: struct spi_gpio_platform_data { 2: unsigned sck; 3: unsigned mosi; 4: unsigned miso; 5: 6: u16 num_chipselect; 7: }; 1: //#define NCS GPIO_PB(2) //定义SS所对应的GPIO接口编号 2: //#define SCLK GPIO_PB(0
gpio模拟mdc/mdio通信
本文主要是学习gpio模拟mdc/mdio通信. 运行环境是在ATMEL的sama5d35MCU,两个GPIO引脚模拟MDC/MDIO通信,读取百兆phy的寄存器的值. #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> #include<linux/sched.h> #include<linux/init.h> #include<linux/sc
gpio模拟i2c驱动
前段时间做项目,需要gpio模拟i2c通信,最后参考了一些资料,然后编写了一个程序.现在发出来,以免以后忘记,也为一些需要的朋友提供参考.不喜勿喷哈. /* 说明:该程序是基于atmel公司的sama5d35 MCU 用其中两个GPIO引脚模拟i2c通信. * 其中两个引脚连接到了hd1650上面.然后检测按键扫描的驱动 * */ 该程序可以作为gpio模拟i2c程序的参考.不同的平台,函数实现不同,但是i2c通信的时序和原理是相同的.希望对一些朋友有帮助. #include<linux/ini
【转载】GPIO模拟i2c通信
I2C总线的通信过程(见图4-8)主要包含三个主要阶段:起始阶段.数据传输阶段和终止阶段. 1. 起始阶段 在I2C总线不工作的情况下,SDA(数据线)和SCL(时钟线)上的信号均为高电平.如果此时主机需要发起新的通信请求,那么需要首先通过SDA和SCL发出起始标志.当SCL为高电平时,SDA电平从高变低,这一变化表示完成了通信的起始条件. 在起始条件和数据通信之间,通常会有延时要求,具体的指标会在设备厂商的规格说明书中给出. 2. 数据传输阶段 I2C总线的数据通信是以字节(8位)作为基本单位
I2C总线以及GPIO模拟I2C
·I2C总线的一些特征: 1. 只要求两条总线,一条串行数据线(SDA),一条串行时钟线(SCL) 2. 两个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机系统软件设定的地址:主机可以作为主机发送器或主机接收器 3. 它是一个真正的多主机总线,如果两个或更多个主机同时初始化数据传输,可以通过冲突检测和总裁防止数据被破坏 4. 串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s 5. 片上的滤波器可以
gpio模拟I2C,驱动pcf8574T
一.pcf8574T介绍 查看pcf8574T的数据手册, A表示读或写,当A为1的时候表示读,当A为0的时候表示写.现把地址控制线,即A2.A1.A0全部接地,可以得到读控制指令为0x41,写控制指令为0x40. 二.I2C介绍 参考: http://blog.csdn.net/ce123_zhouwei/article/details/6882221 1.起始和停止时序 2.数据位的传输 也就是在SCL的下降沿将数据位传出. 3.主控制器为写的时候,接收应答 当传输完数据的第8位,第9位要发
am335x gpio 模拟 spi 驱动添加
kernel 内 make menuconfig // make menuconfig Device Drivers ---> [*] SPI support ---> <*> GPIO-based bitbanging SPI Master // 这个是gpio-spi 的驱动 <*> User mode SPI device driver support // 这个是生成 /dev/spidev*.*的驱动 在板级文件里面添加: // vim arch/arm/ma
linux SPI驱动——简单的gpio模拟SPI驱动测试 (二)
1: /* 2: * Add by xuyonghong for duotin car radio fm 3: * Copyright (C) 2016-5-24 xuyonghong@duotin.com 4: * 5: */ 6: #include <linux/init.h> 7: #include <linux/miscdevice.h> 8: #include <linux/version.h> 9: #include <linux/kernel.h&g
LPC4370使用学习:GPIO的引脚功能使用,和12864OLED模拟I2C驱动
一: 手中有块LPC4370的开发板,因为便宜,所以引脚引出的不多,而且只有基本的底板资源驱动代码和例程. 看着手册和例程看了老半天,写程序写了半天,结果GPIO老是驱动不起来,因为引脚配置寄存器中有个MODE(选择引脚功能)的选项中8个function功能不知道到底啥意思,其中一个手册 LPC4350_30_20_10_User_manuall_CN( 下载地址:http://www.waveshare.net/w/upload/d/d9/LPC4350_30_20_10_User_manua
GPIO实现I2C协议模拟(2)
接着上一节继续补充 结合上一节的描述 写Slave的过程如下(BYTE) 读Slave的过程如下(BYTE) 分为两段 第一段 ,写OFFSET,第二段读数据 WORD的方式与BYTE大同异 读行为 读到一个BYTE就需要发一次ACK,最后一次不发ACK,而是发NACK 写行为 后面 Slave Data写两次,每次都需要检查ACK 再附一个GPIO模拟I2C实际读WORD的行为,波形图
GPIO实现I2C协议模拟(1)
最近需要用GPIO模拟I2C协议,如果是在Linux下面比较简单,但在Windows下面,是否有没Linux那么简单了. 索性自己对I2C协议还有一些了解,翻了SPEC并结合示波器量出的实际信号分析,总算有些成就,在这里以做记录 I2C是什么,这里不做介绍,网上资料太多. 要用GPIO模拟I2C协议,就是控制GPIO的High与Low,复制出与I2C通信协议一样的波形出来. 由于标准的I2C频率在10K到100kHz之间,所以用GPIO模拟还是需要考虑一个IO动作时间问题. 个人推荐整个模拟动作
使用linux内核hrtimer高精度定时器实现GPIO口模拟PWM,【原创】
关键词:Android linux hrtimer 蜂鸣器 等待队列 信号量 字符设备 平台信息:内核:linux3.4.39 系统:android/android5.1平台:S5P4418 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 程序描述:本文控制的设备是无源蜂鸣器,由于无源蜂鸣器是需要产生一定的频率的PWM才能够控制蜂鸣器,不像有源蜂鸣器,只需要提供高低电平就可以控制蜂鸣器.linux内核普通的定时器,由于具有一定的局限性,不能达到纳秒级别的定时
GPIO软件模拟IIC时序
一.MPU6050中的IIC时序 1.1 START和STOP SDA和SCL在高电平时,SDA拉低表示START.SCL拉低,表示可以传输数据. SDA和SCL在低电平时,SDA拉高表示STOP. SCL拉高,表示传输数据结束. /****************************************** *函数原型: void IIC_Start(void) *功能: 产生IIC起始信号 ******************************************/ voi
Uart、SPI和I2C的区别
串口通信:UART.SPI.I2C区别[引用] 1.UART就是两线,一根发送一根接收,可以全双工通信,线数也比较少.数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快.在多机通信上面用的最多. 2.SPI接口和上面UART相比,多了一条同步时钟线,上面UART的缺点也就是它的优点了,对通信双方的时序要求不严格不同设备之间可以很容易结合,而且通信速度非常快.一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等. 3.I2C接口也是两线接口,它是两根线之间通过复杂的逻辑关系
热门专题
335x修改调试串口uboot
stream 自定义分组求和
SSL 关闭 的 pg_hba.conf 记录
vm无法将值写入注册表项
LR错误27796 [10060]
银河麒麟4.0.2安装
unity 组件名称转类型
python 爬去百度搜索结果
sqlmap os shell原理sqlserver
spring boot 传值到页面
arcgis拓扑打断线和线的交叉
交换机接口的class类型和trunk类型有什么不同
TIMESPAN 秒
map获取数组对象的属性名
Vue 项目架构设计与工程化实践
远程凭据无法工作怎么解决
pycharm tensorflow 没有代码补全
flutter 京东侧边筛选
AUTOSAR DCM配置
unity怎么播放模型动画