Inter-IC Bus
Philips에서 제안한 IC간 통신 방식으로 클럭(SCL)과 데이터(SDA)의 2라인을 사용하는 동기 양방향 2선식 Bus이다. 버스에 연결된 각 디바이스는 고유의 어드레스를 갖으며 필요에 따라 receiver와 transmitter로 동작한다. 전송속도는 standard mode에서 100kbps까지 이고 fast mode에서는 400kbps까지 가능하다.
transmitter: 버스에 데이타를 보내는 장치
receiver: 버스로부터 데이타를 받는 장치
master: 전송을 개시하는 장치로 클럭 펄스를 만들고, 전송을 종료하는 일을 한다.
slave: master가 어드레싱한 장치
master가 start condition을 만들면 버스에 연결된 슬레이브 장치들이 이후의 데이터를 기다린다. master가 slave 어드레스를 보내면 각 칩은 자신의 고유 어드레스와 비교를 한다. 어드레스가 일치하는 칩은 이어지는 acknowledge 신호 구간에서 데이터를 low로 유지해 응답을 보낸다. 그러면 master는 데이터를 읽거나 쓰기를 할 수 있다. 모든 작업이 끝나면 master는 stop condition을 발생하고 버스를 release한다. (클럭은 일정한 duty 사이클을 유지할 필요는 없다.)
SDA H -\ /---\ /---\ /---\ /---\ /---
L \----/ \---/ \--------/ \-------/ \----/
SCL H ----\ /-\ /-\ /-\ /-\ /-\ /-\ /------
L \---/ \-----/ \---/ \--/ \--/ \--/ \--/
| START | 1 | 1 | 0 | 1 | 0 | 1 | STOP
* start condition
클럭과 데이터가 모두 high인 일반 상태에서 데이타 라인이 low로 떨어지는 상태.
SDA H ------\
L \-------
SCL H ---------\
L \----
* stop condition
클럭이 high인 동안에 데이타 라인이 low에서 high로 바뀌는 상태.
SDA H /----
L ---------/
SCL H /-------
L ------/
* 일반 데이터 전송에서는 클럭이 low일 때만 데이타의 상태를 바꿀 수 있다. 따라서 클럭이 high인 구간에만 유효한 데이타이다. master는 먼저 데이타 라인을 적당한 데이타로 바꾸고 클럭 라인을 일정시간 high로 하고 다음 SDA 라인의 상태를 바꾸기 전에 클럭을 low로 만든다. 데이타는 8bit이고 MSB가 먼저 전송된다. start 와 stop condition 사이에 전송되는 데이타의 수는 제한이 없다.
SDA H /----------\
L -----/\----------/\-------
SCL H /----\
L --------/ \----------
* acknowledge 조건
master든 slave든 transmitter는 8 bit 전송을 마치고 버스선을 high로 한다. 9번째 사이클 동안 receiver는 데이타 선을 low로 유지하여 acknowledge 를 표시한다.
write시
한 byte write시
|
S |
slave address |
A |
data write |
P |
여러 byte write시
|
S |
slave address |
A |
data write |
A |
data write |
A |
... |
data write |
A |
P |
Note : S = start 조건
A = Wait for Acknowledge
P = stop 조건
read시
slave address를 보낸후 SDA를 놓아주면 slave가 8bit 데이터를 보내고 master는 ack신호를 slave에게 보내준다.
한 byte reading
|
S |
slave address |
WA |
read byte |
P |
여러 byte reading
|
S |
slave address |
WA |
read byte |
GA |
... |
read byte |
GA |
P |
Note: WA = Wait for Acknowledge
GA = Give Acknowledge
=====================================================================================
1. I2C-BUS 개요 ① 필립스사가 제안한 통신방식. ② 주로 제어(control)용으로 쓰임. ③ 2라인만 사용하여 병렬로 많은 수의 칩을 컨트롤 할 수 있음. * 클럭라인(SCL) : 동기용 클럭 신호 * 데이터라인(SDA) : Address, Data, Acknowledge, Start & Stop ④ 전송속도 * Standard Mode : 100kbps * Fast Mode : 200kbps, 400kbps 가능하다. ⑤ 디바이스는 고유의 어드레스(7비트)를 갖지며, 필요에 따라 Receiver와 Transmitter로 동작한다.
2. 하드적인 구성 SDA와 SCL은 모두 한 라인에 물리게 되는데, 다음과 같은 부과회로가 필요로 하다. Rs : 내부보호회로 (보통 100 Ω) Rp : Pull-Up저항 (보통 4.7 kΩ) 3. I2C-BUS 데이타의 구성 (1) 구조의 설명 전체적인 구조를 말로써 설명하자면, 8비트의 데이타와 이를 확인하는 Acknowledge가 조합된 블럭이, 반복되는 구조로 이루어져 있다. 그외에 시작과 끝을 알리는 START와 STOP가 존재한다. [S]는 START 비트로 I2C의 시작을 의미한다. [Addr]은 7비트의 어드레스 데이터로 칩을 호출할 때 사용한다. [R/W]은 READ 혹은 WRITE를 의미한다. [A]는 Acknowledge신호로써 데이터를 잘 받았는지 체크하기위함이다. [Data]는 8비트로써 말그대로 데이타를 의미한다. [P]는 STOP비트로써 I2C의 종료를 의미한다. (2) 8-비트 데이터를 전송할 경우 실제 가장 많이 사용되는 구조이다. 첫번째 데이터블럭은 칩내부의 SUB-ADDRESS로 사용된다. 두번째 데이터블럭은 SUB-ADDRESS의 데이터로 사용된다. 이러므로 해서, 한 칩내의 많은 수의 레지스트를 조정할 수 있게 된다. (3) 8-비트 데이터를 연속적으로 전송할 경우 아래 그림은 단순히 데이터를 연속해서 2번 사용했다. 3번,4번 사용해도 좋다. 단, 의미만 파악하고 있으면 된다. 첫번째 데이타는 (Sub-Address의 번지)의 데이타이고, 두번째 데이타는 (Sub-Address의 번지+1)의 데이타이다. 이것은 많은 양의 데이타를 빠른 시간에 전송할 수 있다. (4) 16-비트 데이터를 전송할 경우 데이터를 연속해서 2번 사용했다. 따라서, 16비트가 된다. 데이터는 MSB FIRST가 되나, 업체에 따라 다를 수 있다. (5) 8-비트 데이터를 읽을 경우 데이타를 읽을 곳의 Slave Address와 Sub-address를 한 후, Re-Start를 한 후, 8비트의 데이타를 읽으면 된다. 4. I2C-BUS 비트의 구성 (1) START I2C 라인을 사용하고자 할 때 사용된다. 1-비트로 구성되어있고, 신호의 구성은 다음과 같다. START = SCL가 HIGH일경우, SDA가 HIGH->LOW (2) STOP I2C 라인을 사용이 끝났을 때 사용된다. 1-비트로 구성되어있고, 신호의 구성은 다음과 같다. STOP = SCL가 HIGH일경우, SDA가 LOW->HIGH (3) REPEAT_START 이 비트는 데이타를 SLAVE로부터 읽을 때 사용된다. 1-비트로 구성되어있고, 신호의 구성은 다음과 같다. REPEAT_START = STOP이 되지 않은 상태에서 START (4) First Byte : 7비트-어드레스+R/W ① Slave Address START BIT후 처음으로 나가는 신호는 칩을 호출하기 위한 데이터이다. 이 데이터는 칩 메이커들이 고유로 붙여서 생산한다. ② R/W신호 칩에서 데이타를 읽을때는 "1", 쓸때는 "0"을 붙인다. (5) Acknowledge * 이 비트는 데이터를 받는 Slave칩이 데이터를 잘 받았는지 체크하는 비트이다. DATA를 잘 받았으면 "0", 받지 못했으면 "1"로 읽혀진다. * 이 데이터는 Slave칩쪽에서 동작을 취해줘야 한다.(응답) 5. 참고사항 (1) 휴지상태 I2C라인이 사용되지 않는 상태이며, 이때는 SCL,SDA 라인모드 High상태임. (2) 데이터의 변경 아래그림과 같이 SCL이 LOW상태일 때 변화되어야 한다. 6. I2C-BUS Soft (1) DATA 처리함수 데이터의 변경은 SCL이 LOW일 때 이루어진다. 다음은 8비트의 데이터를 처리하는 블럭이다. (데이터는 MSB FIRST임) void I2C_ByteWrite(U8 code) (2) START 비트 처리함수 START = SCL가 HIGH일경우, SDA가 HIGH->LOW void I2C_Start(void) (3) STOP 비트 처리함수 STOP = SCL가 HIGH일경우, SDA가 LOW->HIGH void I2C_Stop(void) (4) ACK 비트 처리함수 ACK는 한개의 펄스는 MASTER가 동작시키고, SCL이 HIGH인 동안, SLAVE칩에서 응답한 값을 읽어오는 형식이다. U8 I2C_ACK (void)
I2C-BUS











{
U8 i;
for(i=0;i<8;i++)
{
if( ((0x80>>i) & code)==0 )
{
SDA_LOW;
}
else
{
SDA_HIGH;
}
I2C_Delay(); // data set
SCL_HIGH; I2C_Delay(); // set clk hi
SCL_LOW; I2C_Delay(); // set clk lo
}
}

{
SDA_HIGH; I2C_Delay(); // set data hi
SCL_HIGH; I2C_Delay(); // set clk hi
SDA_LOW; I2C_Delay(); // set data lo
SCL_LOW; I2C_Delay(); // set clk lo
}

{
SDA_LOW; I2C_Delay(); // set data lo
SCL_HIGH; I2C_Delay(); // set clk hi
SDA_HIGH; I2C_Delay(); // set data hi
}

{
U8 i2c_ack=0x00;
I2C_Delay(); // wait ack
SDA_HIGH; I2C_Delay(); // set data hi
SCL_HIGH; I2C_Delay(); // set clk hi
i2c_ack = SDA_READ; // generate ack bit SD_R
SCL_LOW; I2C_Delay(); // set clk lo
if(i2c_ack==0) { return ACK_OK; }
else { return ACK_ERROR; }
}
94 11:18 ltr
95 11:18 vi aaa.log
96 11:18 ltr
97 11:19 grep PASS aaa.log > bbb.log
98 11:19 vi bbb.log
99 11:20 ltr
100 11:20 vi bbb.log
101 11:35 ls
102 11:35 grep ^'[0-9]' tl2297od_K4.lotSum.gdf > 2.log
and
%s/A/B/g
A 를 B로 바꾸기
/g 는 끝까지
| 전국 벚꽃 명소 12선 | ||
|


