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數據總線(I2C)
ESP32 之 ESP-IDF 學習筆記(六)【I2C數據總線(I2C)】文章目錄ESP32 之 ESP-IDF 學習筆記(六)【I2C數據總線(I2C)】一、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







評論