'I2C'에 해당되는 글 2건

  1. 2019.01.28 I2C Bus란 무엇인가?(About I2C)
  2. 2019.01.14 I2C Master and I2C Slave example code

1. I2C Bus란 무엇인가?(About I2C)


I2C 버스는 1980년대 초 여러개의 디바이스간에 통신을 쉽게하기 위해 필립스사에서 만들어 졌습니다. I2C는 "Inter IC"의 약자입니다. I2C 초창기에 통신 속도는 100Kbit/s였로 정해졌고, 그 당시에는 많은 어플리케이션에서 그만한 통신 속도가 필요하지도 않았습니다. 1998년부터 400kbit가 가능해 졌고, high speed 3.4Mbit 옵션 또한 가능해졌습니다. 


I2C는 1:1 통신만이 가능한 것이 아니라 여러 컴퍼넌트들(1:N or N:M)통신도 가능합니다. 유연성과 간결함이 I2C 통신의 최대 장점이자 특징이라할 수 있다. 


특징:


1. 단 2 Line 으로 통신 가능

2. 특별히 통신속도가 RS232처럼 정해저 있지 않음, Master 가 통신 클럭을 발생함

3. 간단한 Master / slave 관계, 버스에 연결된 각 장치들은 고유의 주소에 의해서 접근이 가능함

4. I2C는 중재자, 충돌방지를 제공함으로 진정한 Multi-master 버스를 구현할 수 있다.

'I2C' 카테고리의 다른 글

I2C 통신의 Restart 역할 (Repeated Start Condition)  (0) 2019.02.22
Posted by KennyShin
,

Development Tool: MPLAB X v5.1(MCC v3.66)
Compiler: XC8 v2.0
Device: PIC16F1827

I2C Master: SCL(RB4 - 10pin), SDA(RB1 - 7pin)
I2C Slave:    SCL(RB5 - 11pin), SDA(RB2 - 8pin)


PIC16F1827_I2C.X.zip


void main(void) { // initialize the device SYSTEM_Initialize(); // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits // Use the following macros to: // Enable the Global Interrupts INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts INTERRUPT_PeripheralInterruptEnable(); // Disable the Global Interrupts //INTERRUPT_GlobalInterruptDisable(); // Disable the Peripheral Interrupts //INTERRUPT_PeripheralInterruptDisable(); while (1) { wrBuffer[0] = 0x0A; wrBuffer[1] = 0x0B; wrBuffer[2] = 0x0C; I2C1_MasterWrite( wrBuffer, 1, 0x08, &status); while(status == I2C1_MESSAGE_PENDING); I2C1_MasterRead( rdBuffer, 3, 0x08, &status); while(status == I2C1_MESSAGE_PENDING); __delay_ms(500); } }



I2C Output waveformI2C Output waveform

I2C Output waveform


INTERRUPT_GlobalInterruptEnable() and INTERRUPT_PeripheralInterruptEnable() have to comment out due to I2C Master and I2C Slave are using interrupt service routine

I2C Pin allocation for I2C1, I2C2


Posted by KennyShin
,