TITLE " TWO WIRE/I2C BUS INTERFACE WITH PIC16C5x "
;
LIST P=16C54
;
;************************************************************
;** Two wire/I2C Bus READ/WRITE Sample Routines of Microchip's
;** 24Cxx / 85Cxx serial CMOS EEPROM interfacing to a
;** PIC16C54 8-bit CMOS single chip microcomputer
;** Revsied Version 2.0 (4/2/92).
;**
;** Part use = PIC16C54-XT/JW
;** Note: 1) All timings are based on a reference crystal frequency of 2MHz
;** which is equivalent to an instruction cycle time of 2 usec.
;** 2) Address and literal values are read in octal unless otherwise
;** specified.
;********************************************************
;
;-----------------------------------------------------------------------------
; Files Assignment
;-----------------------------------------------------------------------------
;
PC EQU 2 ; Program counter
STAT EQU 3 ; PIC status byte
FSR EQU 4 ; File Select Register
RA EQU 5 ; Port A use to select device address
RB EQU 6 ; RB7 = SDA, RB6 = SCL
;
STATUS EQU 08 ; Status register
FLAG EQU 09 ; Common flag bits register
EEPROM EQU 0A ; Bit buffer
ERCODE EQU 0B ; Error code (to indicate bus status)
ADDR EQU 10 ; Address register
DATAI EQU 11 ; Stored data input register
DATAO EQU 12 ; Stored data output register
SLAVE EQU 13 ; Device address (1010xxx0)
TXBUF EQU 14 ; TX buffer
RXBUF EQU 15 ; RX buffer
COUNT EQU 16 ; Bit counter
;
TIMER0 EQU 18 ; Delay timer0
TIMER1 EQU 19 ; Delay timer1
;
;
;-----------------------------------------------------------------------------
; Bit Assignments
;-----------------------------------------------------------------------------
;
; Status bits
;
Z EQU 2
C EQU 0
;
; FLAG Bits
;
ERROR EQU 0 ; Error flag
;
; EEPROM Bits
;
DI EQU 7 ; EEPROM input
DO EQU 6 ; EEPROM output
;
; I2C Device Bits
;
SDA EQU 7 ; RB7, data in/out
SCL EQU 6 ; RB6, serial clock
;
;END FILES/BITS EQUATE
PAGE
;
;-----------------------------------------------------------------------------
; Two wire/I2C - CPU communication error status table and subroutine
;-----------------------------------------------------------------------------
; input : W-reg = error code
; output : ERCODE = error code
; FLAG(ERROR) = 1
;
; code error status mode
; ------- ------------------------------------------------------
; 1 : SCL locked low by device (bus is still busy)
; 2 : SDA locked low by device (bus is still busy)
; 3 : No acknowledge from device (no handshake)
; 4 : SDA bus not released for master to generate STOP bit
;-----------------------------------------------------------------------------
;
;Subroutine to identify the status of the serial clock (SCL) and serial data
;(SDA) condition according to the error status table. Codes generated are
;useful for bus/device diagnosis.
;
ERR
BTFSS FLAG,ERROR ; Remain as first error encountered
MOVWF ERCODE ; Save error code
BSF FLAG,ERROR ; Set error flag
RETLW 0
;
;-----------------------------------------------------------------------------
; START bus communication routine
;-----------------------------------------------------------------------------
; input : none
; output : initialize bus communication
;-----------------------------------------------------------------------------
;
;Generate START bit (SCL is high while SDA goes from high to low transition)
;and check status of the serial clock.
BSTART
MOVLW B'00111111' ; Put SCL, SDA line in output state
TRIS RB
;**************************************************************
bsf RB,SDA ;make sure sda is high
;*******************************************************
BSF RB,SCL ; Set clock high
MOVLW 1 ; Ready error status code 1
BTFSS RB,SCL ; Locked?
CALL ERR ; SCL locked low by device
BCF RB,SDA ; SDA goes low during SCL high
NOP ; Timing adjustment
NOP
NOP
BCF RB,SCL ; Start clock train
RETLW 0
;
;END SUB
PAGE
;
;-----------------------------------------------------------------------------
; STOP bus communication routine
;-----------------------------------------------------------------------------
; Input : None
; Output : Bus communication, STOP condition
;-----------------------------------------------------------------------------
;
;Generate STOP bit (SDA goes from low to high during SCL high state)
;and check bus conditions.
;
BSTOP
;*********************************************************
MOVLW B'00111111' ; Put SCL, SDA line in output state
TRIS RB
;**************************************************************
BCF RB,SDA ; Return SDA to low
BSF RB,SCL ; Set SCL high
nop
nop
nop
MOVLW 1 ; Ready error code 1
BTFSS RB,SCL ; High?
CALL ERR ; No, SCL locked low by device
BSF RB,SDA ; SDA goes from low to high during SCL high
MOVLW 4 ; Ready error code 4
BTFSS RB,SDA ; High?
CALL ERR ; No, SDA bus not release for STOP
RETLW 0
;
;END SUB
;
;-----------------------------------------------------------------------------
; Serial data send from PIC to serial EEPROM, bit-by-bit subroutine
;-----------------------------------------------------------------------------
; Input : None
; Output : To (DI) of serial EEPROM device
;-----------------------------------------------------------------------------
;
BITIN
MOVLW B'10111111' ; Force SDA line as input
TRIS RB
BSF RB,SDA ; Set SDA for input
BCF EEPROM,DI
BSF RB,SCL ; Clock high
MOVLW 1
BTFSC RB,SCL ; Skip if SCL is high
GOTO BIT1
BTFSS FLAG,ERROR ; Remain as first error encountered
MOVWF ERCODE ; Save error code
BSF FLAG,ERROR ; Set error flag
BIT1
BTFSC RB,SDA ; Read SDA pin
BSF EEPROM,DI ; DI = 1
NOP ; Delay
BCF RB,SCL ; Return SCL to low
RETLW 0
;
;END SUB
PAGE
;
;-----------------------------------------------------------------------------
; Serial data receive from serial EEPROM to PIC, bit-by-bit subroutine
;-----------------------------------------------------------------------------
; Input : EEPROM file
; Output : From (DO) of serial EEPROM device to PIC
;-----------------------------------------------------------------------------
;
BITOUT
MOVLW B'00111111' ; Set SDA, SCL as outputs
TRIS RB
BTFSS EEPROM,DO
GOTO BIT0
BSF RB,SDA ; Output bit 0
MOVLW 2
BTFSC RB,SDA ; Check for error code 2
GOTO CLK1
BTFSS FLAG,ERROR ; Remain as first error encountered
MOVWF ERCODE ; Save error code
BSF FLAG,ERROR ; Set error flag
GOTO CLK1 ; SDA locked low by device
;
BIT0
BCF RB,SDA ; Output bit 0
NOP ; Delay
NOP
NOP
CLK1
BSF RB,SCL
MOVLW 1 ; Error code 1
BTFSC RB,SCL ; SCL locked low?
GOTO BIT2 ; No.
BTFSS FLAG,ERROR ; Yes.
MOVWF ERCODE ; Save error code
BSF FLAG,ERROR ; Set error flag
BIT2
NOP
NOP
BCF RB,SCL ; Return SCL to low
RETLW 0
;
;END SUB
PAGE
;
;
;-----------------------------------------------------------------------------
; RECEIVE DATA subroutine
;-----------------------------------------------------------------------------
; Input : None
; Output : RXBUF = Receive 8-bit data
;-----------------------------------------------------------------------------
;
RX
MOVLW .8 ; 8 bits of data
MOVWF COUNT
CLRF RXBUF
;
RXLP
RLF RXBUF ; Shift data to buffer
SKPC
BCF RXBUF,0 ; carry ---> f(0)
SKPNC
BSF RXBUF,0
CALL BITIN
BTFSC EEPROM,DI
BSF RXBUF,0 ; Input bit =1
DECFSZ COUNT ; 8 bits?
GOTO RXLP
BSF EEPROM,DO ; Set acknowledge bit = 1
CALL BITOUT ; to STOP further input
RETLW 0
;
;END SUB
;
;-----------------------------------------------------------------------------
; TRANSMIT DATA subroutine
;-----------------------------------------------------------------------------
; Input : TXBUF
; Output : Data X'mitted to EEPROM device
;-----------------------------------------------------------------------------
;
TX
MOVLW .8
MOVWF COUNT
;
TXLP
BCF EEPROM,DO ; Shift data bit out.
BTFSC TXBUF,7 ; If shifted bit = 0, data bit = 0
BSF EEPROM,DO ; Otherwise data bit = 1
CALL BITOUT ; Serial data out
RLF TXBUF ; Rotate TXBUF left
SKPC ; f(6) ---> f(7)
BCF TXBUF,0 ; f(7) ---> carry
SKPNC ; carry ---> f(0)
BSF TXBUF,0
DECFSZ COUNT ; 8 bits done?
GOTO TXLP ; No.
CALL BITIN ; Read acknowledge bit
MOVLW 3
BTFSC EEPROM,DI ; Check for acknowledgement
CALL ERR ; No acknowledge from device
RETLW 0
;
;END SUB
PAGE
;
;-----------------------------------------------------------------------------
; BYTE-WRITE, write one byte to EEPROM device
;-----------------------------------------------------------------------------
; Input : DATAO= data to be written
; ADDR = destination address
; SLAVE = device address (1010xxx0)
; Output : Data written to EEPROM device
;-----------------------------------------------------------------------------
;
ORG 080 ; The location for BYTE-WRITE routine can be
; ; assigned anywhere between (377-777) octal.
WRBYTE
MOVF SLAVE,W ; Get SLAVE address
MOVWF TXBUF ; to TX buffer
CALL BSTART ; Generate START bit
CALL TX ; Output SLAVE address
MOVF ADDR,W ; Get WORD address
MOVWF TXBUF ; into buffer
CALL TX ; Output WORD address
MOVF DATAO,W ; Move DATA
MOVWF TXBUF ; into buffer
CALL TX ; Output DATA and detect acknowledgement
CALL BSTOP ; Generate STOP bit
goto wrt_end
;
;
;
;-----------------------------------------------------------------------------
; BYTE-READ, read one byte from serial EEPROM device
;-----------------------------------------------------------------------------
; Input : ADDR = source address
; SLAVE = device address (1010xxx0)
; Output : DATAI = data read from serial EEPROM
;-----------------------------------------------------------------------------
;
ORG 0C0 ; The location for BYTE-READ routine can be
; ; assigned anywhere between (377-777) octal.
RDBYTE
MOVF SLAVE,W ; Move SLAVE address
MOVWF TXBUF ; into buffer (R/W = 0)
CALL BSTART ; Generate START bit
CALL TX ; Output SLAVE address. Check ACK.
MOVF ADDR,W ; Get WORD address
MOVWF TXBUF
CALL TX ; Output WORD address. Check ACK.
CALL BSTART ; START READ (if only one device is
MOVF SLAVE,W ; connected to the I2C bus)
MOVWF TXBUF
BSF TXBUF,0 ; Specify READ mode (R/W = 1)
CALL TX ; Output SLAVE address
CALL RX ; READ in data and acknowledge
CALL BSTOP ; Generate STOP bit
MOVF RXBUF,W ; Save data from buffer
MOVWF DATAI ; to DATAI file.
goto rd_end
;
;Test program to read and write ramdom
start
movlw 0AE ;set A2=A1=A0=1
movwf SLAVE ; /
movlw 2 ;set r/w loc. = 2
movwf ADDR ; /
movlw 55 ;write 55 to SEEPROM
movwf DATAO ; /
goto WRBYTE ;write a byte
wrt_end
call delay ;wait for write
;operation (internal)
goto RDBYTE ;read back data
rd_end
movlw 55 ;test if read
xorwf DATAI,W ;correct?
btfss STAT,Z ;yes then skip
wrong
goto wrong
correct
goto correct
;
;At 2.0Mhz, delay = approx. 3mS.
delay
clrf 1F ;clear last location
dly1
nop
nop
nop
decfsz 1F ;reduce count
goto dly1 ;loop
retlw 0
;
org 0x1FF
goto start
;
END
PIC的一个读写I2C程序
- I2C(130746)
相关推荐
热点推荐
STM32CubeMx入门教程(7):I2C的读写应用
导语“本次 教程使用CubeMx配置I2C进行I2C总线设备的数据读写操作,使用EEPROM作为实验对象”
2023-07-12 11:34:05
6522
6522
Linux内核中I2C系统的设计思路
[ 导读] 本文通过阅读内核代码,来梳理一下I2C子系统的整体视图。在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,没有一个清晰的思路。所以从高层级来分析一下I2C系统的设计思路,将有助于设计调试具体的驱动程序。
2023-09-06 09:40:29
1102
1102
I2C读写时序分析和实现思路
上篇推文对I2C总线的特性进行了介绍和描述。对于开发者而言,最重要的是编码I2C的读写时序驱动。本篇推文主要总结和分享I2C总线主机端通信的编程实现思路,并不对应特定MCU的硬件I2C外设,此处需要加以区分。
2023-10-01 16:54:00
3902
3902
I2C总线介绍 I2C读写时序介绍
作为嵌入式开发人员,无论是硬件还是软件工程师,或多或少都会接触过I2C接口的外设。诸如常用的存储器EEPROM等皆是I2C接口进行通信。
2023-10-01 16:57:00
5967
5967
I2C总线—电平转换
我们先来看一张图,熟悉I2C的人一看,这不是I2C的level shifter电路嘛,在Philip的I2C标准里面有,没有啥复杂的。
2023-11-02 12:32:20
7581
7581
I2C读写与使用
这一届爽是真的爽,hal库和cubemx节省一半时间工作量23333终于学到I2C了,单片机的时候就没把I2C学好,现在来恶补,,,这个博主把为什么I2C读、写要先设置0xA1、0xA0讲得很到位
2022-01-11 07:12:02
I2C不工作
自己的代码。我就是不能让它工作。这是不可能的。这里是我的代码:对于I2C:主程序:我得到的是255。是的,我尝试了“0xA0”和“0xA1”作为EEPROM读写地址。如果你不能给我一个好的答案,请不要
2019-09-29 07:34:13
I2C协议以及I2C读写EEPROM
I2C协议以及I2C读写EEPROM实验文章目录I2C协议以及I2C读写EEPROM实验I2C 协议简介一、I2C 物理层二、I2C 协议层2-1 I2C 基本读写过程2-2 通讯的起始和停止信号
2021-08-23 08:25:55
PIC16F1454 I2C和USB问题
亲爱的大家,我成功地用pic16F1454编写了一个通过I2C读出压力传感器的接口。然后,我在我的C上编写了一个USB引导加载程序(我从修改来自mmabthrd
2019-08-23 11:45:48
PIC16F15356的I2C问题
大家好,一个奇怪的问题,MMC配置RC3端口clk和RC4来管理压力传感器,一切正常。在同一I2C总线上还连接有语音合成芯片,该芯片具有I2C,但是例如非标准通信不能管理ack。d RC4以模拟方式
2020-03-20 10:18:45
PIC16F1827上的两个I2C通道
嗨,我希望两个使用两个独立的I2C设备,集中控制从PIC16F1827。这两个器件是1)10位微芯片3021ADC和2)10位微芯片4716DAC。我使用ADC的原因是,我正在通过Maxim
2020-04-07 15:25:53
PIC16F1834怎么使用I2C?
吗?我不知道在哪里搜索。我有一个用PIC18F4550验证过的源代码,但是我没有成功地将它改写为PIC16F18344。我使用i2c的默认引脚。我认为问题出在in it_i2c()中。代码验证
2019-08-21 09:50:45
EEPROM I2C协议的特点与基本读写过程
EEPROMI2C协议I2C物理层的特点I2C的协议层I2C基本读写过程通讯的起始和停止信号数据有效性地址及数据方向响应STM32的I2C特性及架构通讯引脚时钟控制逻辑数据控制逻辑整体控制逻辑
2022-01-21 08:57:09
关于I2C的读写问题
下面两个程序都是关于I2C的写数据程序,为什么第二个程序就不行呢??第一个程序:void Write_A_Byte(uchar b) //向 24C16 中写一字节数据{uchar i;for(i=0;i
2017-04-11 10:12:37
分享一个嵌入式linux读写24c02的i2c程序
这里分享一个嵌入式linux读写24c02的i2c程序ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
2021-11-04 07:53:51
如何通过i2c连续读写eeprom?
我用verilog自制了一个i2c模块,将电路下载到fpga中,在读写eeprom时出现问题,不能连续读写,如果单独读写一个字节,即随机读写一个字节功能是正常的,连续读写和随机读写有什么区别?
2023-03-29 10:22:13
I2C总线驱动程序
1 /**————————————————————2 〖说明〗I2C总线驱动程序(用两个普通IO模拟I2C总线)3 包括100Khz(T=10us)的标准模式(慢速模式)选择,4 和400Khz(T=2.5us)的快速模
2008-08-13 17:04:37
64
64i2c总线ppt(I2C总线器件应用)
I2C总线器件应用第一节 I2C总线器件应用概述I2C总线工作原理I2C总线系统结构I2C总线系统结构如图7-1所示。其中,SCL是时钟线,SDA是数据线。总线上的各器件都采用漏
2008-08-13 17:34:34
0
0I2C汇编程序
I2C汇编程序:/*****;FileName: IicSMasU.a51;Describe: 51 系列模拟I2C 总线主控器驱动程序;Date: 2003/11/12
2009-03-02 23:38:51
35
35I2C总线器件的C51读写程序
I2C总线规范与I2C器件C51读写程序
本文简要介绍了I2C总线,并给出了I2C器件的C51读写程序,极大的方便了大家对I2C总线的学习和设计应用。程序设计采用模块化设计,方便向
2009-03-25 09:21:29
62
62I2C总线规范与I2C器件C51读写程序
I2C总线规范与I2C器件C51读写程序:本文简要介绍了I2C总线,并给出了I2C器件的C51读写程序,极大的方便了大家对I2C总线的学习和设计应用。程序设计采用模块化设计,方便向目标板的
2009-08-22 17:51:07
95
95用Verilog HDL实现I2C总线功能
简述了I2C总线的特点;介绍了开发FPGA时I2C总线模块的设计思想;给出并解释了用Verilog HDL实现部分I2C总线功能的程序,以及I2C总线主从模式下的仿真时序图。
2009-10-19 10:49:16
104
104I2C总线接口模块设计
本实验是基于EasyFPGA030的I2C总线接口模块设计,用EasyFPGA030开发套件通过I2C协议实现对二线制I2C串行EEPROM的读写操作,先把数据写入EEPROM,然后再读取出来显示在数码管上
2009-11-02 17:01:45
41
41I2C Guid I2C指南
I2C Guid I2C指南
The I2C bus is used in a wide rangeof applications because it is simpleand
2010-04-23 13:55:40
36
36基于I2C总线的EEPROM驱动程序
I2C总线是由Philips公司开发的用于器件之间连接的2线式双向同步串行总线。Linux内核中针对I2C总线的特性,其设备驱动使用了一种特殊的体系结构。介绍了MPC8250处理器上I2C总
2010-12-07 13:58:56
55
55I2C总线驱动程序的实现
I2C总线驱动程序的实现
I2C 驱动程序的简介本驱动程序为标准的51 系列CPU 编写,让CPU 模拟成一个I2C 总线主器件,并部分支
2008-09-26 17:25:52
6072
6072
PIC读写93C46程序
PIC读写93C46程序
;********************************************************************;*  
2009-01-16 11:46:22
1853
1853PIC单片机读写I2C实例源程序一
PIC单片机读写I2C实例源程序一
; this route is used I2C EESROM write and; read; addressing mode is indirectSTART BSF RB_C,SDA NOP MOVFW RB_
2009-01-16 11:47:10
2954
2954PIC:读写I2C程序
PIC:读写I2C程序
I2CCTR EQU 10HI2CAD EQU 11HREG3 EQU 12HREG2 EQU 13HREG1 EQU 14HREG0 EQU 15H
GENR0 EQU 8HGENR1 EQU 9HB
2009-01-16 11:47:45
1250
1250用Verilog HDL实现I2C总线功能
摘要: 简述了I2C总线的特点;介绍了开发FPGA时I2C总线模块的设计思想;给出并解释了用Verilog HDL实现部分I2C总线功能的程序,以及I2C总线主从模式下的仿真时序图
2009-06-20 13:17:08
7138
7138
PIC单片机的I2C 24LC02 C读写程序
PIC单片机的I2C 24LC02 C读写程序
1 I2C总线特点 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组
2009-10-30 08:27:24
5557
5557I2C的读写操作实验
I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。在 I2C总线上传送的一个数据字节由八位组成
2011-05-10 10:19:10
5758
5758
NIOS实现I2C总线
I2C 总线的实现关键是SDA,他是双向线,如果对与一个芯片只写而不读,I2C 实现起来很容易.使用NIOS 实现I2C 总线的关键是处理好SDA 双向线的问题.
2011-11-01 14:28:50
38
38《振南电子STM32视频教程》第八讲:I2C总线
[第8讲] I2C总线(96分钟),由何强主讲.本课主要讲解:(1).I2C总线中的概念讲解;(2).I2C总线应用实例;(3).I2C总线的操作要素;(4).基于I2C总线的读写工作过程;(5).EEPROM AT24C02 的操作;(6).软件模拟I2C时序;(7).字节数据的时序模拟讲解
2016-10-09 15:57:01
1264
1264PIC单片机之I2C(从模式)详解
I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。今天就来看看PIC单片机使用MSSP模块实现I2C从模式。
2017-11-14 17:24:45
13285
13285
I2C—读写EEPROM
【*】程序简介 -工程名称:基本读写EEPROM -实验平台: 秉火STM32 F429 开发板 -MDK版本:5.16 -ST固件库版本:1.5.1 【 !】功能简介: 读写板载的 I2C
2017-12-13 15:12:33
23
23TMS320VC5503,C5506,C5507,C5509和C5509A的I2C外围设备的编程详细概述
此应用程序报告演示了用于编程TMS320VC5503,C5506,C5507,C5509和C5509A集成电路(I2C)外围模块的过程。I2C的基本操作,包括读写,以及I2C总线的初始化。这些操作用在芯片支持库(CSL)中提供的I2C例程来说明。
2018-05-03 14:17:02
11
1180C51单片机模拟I2C总线的主机程序分享
I2C总线协议程序
在使用的过程中一定要注意时序、时间的问题。
i2c.c
/*
I2C.c
标准80C51单片机模拟I2C总线的主机程序
All rights
2018-12-05 15:39:27
4148
4148
PIC16F877利用I2C读取24LC02测试程序免费下载
本文档的主要内容详细介绍的是PIC16F877利用I2C读取24LC02测试程序免费下载
PIC16F7877向24LC02中写数据,然后再读出,并在B端口显示
2018-12-27 08:00:00
24
24使用PIC877单片机进行I2C读写测试的程序资料免费下载
本文档的主要内容详细介绍的是使用PIC877单片机进行I2C读写测试的程序资料免费下载
PIC16F7877向24LC256有高地址的存储芯片中写数据,然后再读出
2018-12-27 08:00:00
11
11Arduino教程之I2C模块使用教程资料免费下载
为什么叫I2C模块?和一元硬币差不多大小的一块PCB上放了三个芯片,分管三个功能:时间计算、温度侦测、数据存储。这三个芯片都是通过I2C总线通信的。
我们知道,I2C理论上可以级联2的7次方即
2019-01-22 16:59:25
9
9linux自带i2c工具使用
I2C总线被全球超过50个公司的1000+个ICs所使用,已然是一个世界标准.另外,I2C总线与多种不同的控制总线是兼容的,比如SMBus(系统管理总线),PMBus(电源管理总线),IPMI(智能
2019-05-13 09:23:52
4294
4294Linux的I2C驱动架构
控制器的差异,不考虑其实现细节地与硬件设备通讯。1.1 总线驱动在系统开机时,首先装载的是I2C总线驱动。一个总线驱动用于支持一条特定的I2C总线的读写。一个总线驱动通常需要两个模块,一个struct
2019-04-02 14:38:21
926
926Linux驱动中的I2C驱动架构详细分析
其实I2C接口非常的简单,即使用51单片机的gpio来模拟I2C,编写一个e2prom或者其他I2C接口的驱动程序,也不是什么难事,几百行代码就能搞定。但是Linux 的I2C驱动体系结构却有相当
2019-08-01 17:35:00
3
3AT89S52单片机并行端口模拟I2C总线协议读写AT24C04的设计
AT24C04是具有I2C总线接口的EEPROM.大小为512*8bit.单片机AT89S52本身不具有I2C总线结口,所以可编写程序用并行端口模拟I2C总线协议读写AT24C04.
2019-08-14 14:34:25
3192
3192I2C通信协议应该如何学习
我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习 I2C 有一定的帮助。一、 分析源代码学习 I2C,首先我们
2020-04-28 08:00:00
22
22I2C系列的合集,可以系统学习I2C协议
这篇文章给大家带来了I2C系列的合集,可以系统学习I2C协议。大家赶紧看看吧! 1、I2C总线:何时使用I2C缓冲器 本文讨论了使用I2C缓冲区的用例,好处和应用。 在用于嵌入式设备的所有串行接口
2020-09-23 15:28:10
3841
3841适用于PIC16F1XXX增强型内核的I2C自举程序
新的PIC16F1XXX增强型内核单片机能够在软件控制下写入自己的程序存储器。这允许单片机在闪存程序存储器中进行修改。本应用笔记将介绍使用 I2C™ 作为通信通道的自举程序的实现。
2021-04-02 10:00:07
8
8I2C读写心得资料下载
电子发烧友网为你提供I2C读写心得资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
2021-04-17 08:42:44
3
3I2C总线的基本通信总结
在电子设计开发中I2C大家已经很熟悉了,每一种电子产品小到电子开关,大到卫星通信都会利用的I2C总线。据统计I2C在电子产品中占据了93%的份额,几乎任何一种电路都要使用。 I2C是由PHILIPS
2021-08-26 14:08:36
19393
19393
嵌入式linux应用读写i2c示例
这里分享一个嵌入式linux读写24c02的i2c程序ioctl函数的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
2021-11-01 16:57:05
12
12【转】PIC单片机之I2C通信-主-从模式
,你也可以主动和我讲话。 I2C:就好像上下级对话。一个领导面对一个或者多个员工。只有领导主动说话的份儿,下面的员工不能主动说话。只有领导问了,员工才能答。 I2C通信 I2C通信只需要两个引脚 一个数据线,一个时钟线。 数据线顾名思义就是用
2021-11-16 13:21:02
19
1951单片机模拟I2C读写M24LR04
目录一、 有关M24LR04的介绍二、 I2C的读写时序三、 参考代码四、 调试中遇到的问题一、 有关M24LR04的介绍M24LR04是ST公司的一款NFC芯片,支持ISO15693
2021-11-23 16:20:54
5
5STM32学习之I2C协议(读写EEPROM)
EEPROM)。# 一、I2C协议(读写EEPROM)1、SCL2、SDA二、代码1.i2c.c代码如下(示例):#include "i2c.h"//IIC配置void I2C_EE_Config(void){ I2C_InitTypeDef I2C_InitStructur
2021-11-30 15:21:11
34
34STM32的硬件I2C有BUG吗?
坊间一直流传着一个传说~STM32的硬件I2C设计有BUG,最好不要用,用软件I2C比较靠谱。长久以来,为了不必要的麻烦,我也一直没有用过硬件I2C,主要是软件I2C也比较...
2021-12-04 14:51:08
26
26I2C start信号到SCL第一个上升沿时间太长
日常工作中,遇到过如题的问题,当时不知道原因,今天在代码仿真的时候,无意中发现了如题的不良现象,如下是keil 仿真的GPIO模拟I2C的结果因为问题是在I2C起始条件之后,程序代码定位应该在
2021-12-04 16:21:05
1
1一文看懂I2C协议
文章目录I2C是什么5种速率4种信号起始信号停止信号数据有效性应答信号非应答信号读写时序7位和10位地址I2C保留字节FPGA实测I2C波形SPI和I2C的对比官方标准文档下载1. I2C官方标准
2021-12-05 19:21:09
15
15linux I2C子系统(及相关程序设计MPU6050)
文章目录linux I2C子系统框架在设备树中添加从设备信息,mpu5060I2C driver 程序的编写mpu6050 I2C程序具体实现linux I2C子系统框架在之前的一篇文章中记录
2021-12-06 13:36:13
9
9嵌入式内核及驱动开发-09IIC子系统框架使用(I2C协议和时序,I2C驱动框架,I2C从设备驱动开发,MPU6050硬件连接
从设备adapter i2c 控制器对象数据包对象读写数据设备树中添加MPU6050信息内核选配添加设备树节点编写驱动程序 mpu6050_i2c_drv.cI2c协议和时序I2c介绍I2C(In...
2021-12-06 14:06:07
17
17硬件I2C与模拟I2C
硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C;一般也较为稳定,但是程序较为繁琐。硬件(固件)I2C是直接调用内部寄存器进行
2021-12-28 19:14:11
81
81ESP32 之 ESP-IDF 教学(六)——I2C数据总线(I²C)
ESP32 之 ESP-IDF 学习笔记(六)【I2C数据总线(I²C)】文章目录ESP32 之 ESP-IDF 学习笔记(六)【I2C数据总线(I²C)】一、I2C 简介二、I2C 数据帧三、在
2021-12-28 19:25:23
22
22在一个I2C例程上面修改代码来实现24C02的读写
在使用硬件 I2C 操作时,有时候会遇到死锁问题。在此情况下,可以把 SCL,SDA 引脚初始化为 GPIO,如此例中的 PB8, PB9 然后连续翻转 SCL 引脚送出 9 个时钟脉冲,既可以使 I2C 从死锁的状态复位。然后再重新初始化 I2C 模块,进入正常 I2C 操作。
2022-08-16 10:29:08
4058
4058
如何提高I2C调试效率?
一般情况下,我们想要调试这类 I2C 器件,都需要先找一块主控 MCU 板卡,用杜邦线将 I2C 器件连接到板卡上,然后编写 MCU 代码,需包含 I2C 软件驱动以及测试用例,最后将程序下载进 MCU 并在线调试。
2023-06-08 13:00:08
2201
2201
I2C传输发生timeout时
顺序 log 中第一个发生 timeout 的 slave 有 power 控制和 reset 控制的 slave other slave 复现问题后,可以手动将相应外设去掉,确认是哪个外设将 i2c bus 拉住,再与供应商沟通,debug 一下该 IC 状态,理清拉住 i2c bus原因
2023-07-22 14:46:40
4238
4238
I2C控制器驱动介绍
(控制器)抽象成 i2c_adapter。 对于一个 I2C 适配器,肯定要对外提供读写 API 函数,设备驱动程序可以使用这些 API 函数来完成读写操作。i2c_algorithm 就是 I2C
2023-07-22 15:38:35
2500
2500
I2C子系统SW Architecture
适配器(控制器)驱动,这里用到两个重要的数据结构:i2c_adapter 和 i2c_algorithm。其中,Linux 内核将 SOC 的 I2C 适配器(控制器)抽象成 i2c_adapter,i2c
2023-07-22 16:01:00
1514
1514
I2C子系统几个主要的结构体
I2C Data Structure 我们要搞懂一个 Linux 子系统,必须研究它的数据结构,搞懂每个结构体存储了什么东西,才能梳理清楚该子系统的架构。 I2C 子系统有几个主要的结构体: I2C
2023-07-22 16:04:05
1562
1562
I2C和I3C的区别有哪些
I2C 和 I3C 主要区别如下: I2C 虽然也是两条线,但是很多时候传感器需要一条额外的中断线,来告诉主控数据已经准备好。I3C 允许从设备直接在总线上产生中断,不再需要一条额外的中断
2023-07-22 16:20:20
9519
9519
如何解决I2C器件死锁的问题?
如何解决I2C器件死锁的问题? I2C总线是一种流行的串行通信协议,在许多嵌入式系统中使用。I2C可以连接多个从属设备到一个主控设备上,简化了系统设计和管理。然而,当I2C总线上的从属设备出现死锁
2023-09-12 11:18:13
3964
3964什么是串口转I2C?有什么特点?
信号转换为I2C信号,从而可以使用I2C协议与其他设备进行通信。 串口转I2C的特点 1. 易用性 串口转I2C通常是一个易于使用的设备。大多数串口转I2C具有简单的接口和易于理解的指令集。这使得初学者和专业人士都能够轻松地使用它。 2. 快速传输 使用I2C协议传
2023-09-14 17:52:49
2045
2045i2c采样是上升沿吗?
i2c采样是上升沿吗? I2C采样是指在I2C总线上对数据进行采样。在I2C总线上,数据的传输是通过2条线传递。一条是时钟线(SCL),另一条是数据线(SDA)。采样的目的是为了准确地读取或写入
2023-09-19 17:16:05
4508
4508GD32 MCU硬件I2C不可靠不如软件I2C?来看看红枫派开发版的硬件I2C驱动如何做到稳得一批
在一个评论中,看到网友对硬件I2C的讨论,硬件I2C Busy找不到原因、软件I2C稳得一批。
2024-02-23 09:37:37
3849
3849
什么是I2C协议 I2C总线的控制逻辑
在实际使用过程中,I2C比较容易出现的一个问题就是死锁 ,死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。
2024-03-12 09:17:41
2427
2427
I2C总线应用实例分析
。I2C总线使用两条线进行通信:数据线(SDA)和时钟线(SCL)。这种双线制设计使得I2C总线能够在多个设备之间共享,而不需要为每个设备单独布线。 应用实例:温湿度传感器 假设我们正在设计一个智能家居系统,需要实时监测室内的温湿度。我们选择使用一个带有I2C接口的
2025-01-17 15:09:35
1372
1372
电子发烧友App







评论