http://cafe.naver.com/robotall.cafe
S3C2410X RISC 마이크로 프로세서는 Multi-master IIC-Bus 시리얼 인터페이스를 지원한다
전용되어지는 한개의 Serial Data Line(SDA)과 한개의 Serial Clock Line(SCL)은 IIC Bus에 연결되어진 버스 마스터들과 주변장치사이에서 데이터(정보)를 이동시킨다.
SDA와 SCL은 양방향(bi-direction)라인이다.
Mulit Master IIC-Bus에서 Mulitple S3C2410X RISC 마이크로 프로세서는 Slave Device로 Serial Data를 주거나 받을수 있다.
S3C2410X RISC 마이크로 프로세서는 IIC-bus를 통한 데이터전송을 개시 할 수 있고, 중지시킬 수 있다.
S3C2410X의 IIC-BUS는 표준 버스 중재 절차를 사용한다.
(버스를 여러 장치가 사용할 때 발생 될 수 있는 상황을 중재하는 방법 )
Multi-Master IIC-Bus 기능을 제어하기위해서는 다음에 기술된 레지스터에 적당한 값을 써넣어야한다.
① Multi-Master IIC-bus control register ,IICCON
② Multi-Master IIC-bus control/status register , IICSTAT
③ Multi-Master IIC-bus Tx/Rx Data Shift register, IICDS
④ Multi-Master IIC-bus address register, IICADD
IIC-bus가 사용되어지지 않을때에는 SDA라인과 SCL라인은 모두 High Level이다.
SDA의 한번의 High 에서 Low로의 변환은 SDA을 시작상태(Start Condition)으로 시작할수 있다. 다.또한 SDA의 한번의 SCL이 High 상태에서 Low 에서 High로의 변환은 정지상태으로 시작할 수 있다.
시작과 정지상태들은 언제나 master device에 의해서 발생된다. 시작상태가 시작된 후 버스에 놓여지게 되는 첫 번째 바이트의 7비트의 주소 값은 Master Device에 의해서 Slave Device를 결정할 수 있다. 8번째 비트는 전송의 대한 방향을 결정하게 된다.(읽기/쓰기).
SDA에 실려지는 모든 바이트의 데이터들은 8비트로 구성된다. 이런 바이트들은 Bus가 전송 동작중일 때는 무제한 보내지거나 받을 수 있다. 데이터는 언제나 MSB(most significant bit)가 먼저 보내지고, 또한 즉각 ACK비트가 따라오게 된다.
(*그러나 ACK비트는 데이터를 받는 디바이스(읽어오거나 쓰여지는)에서 발생하게 된다.)
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
Address Register |
|
|
| |
|
|
|
|
|
|
|
|
↕ |
|
|
| |
|
|
|
IIC-Bus Control Logic |
|
|
|
Comparator |
|
|
| ||
|
|
| ||||||||||
|
|
|
|
|
|
↕ |
|
|
| |||
|
SCL |
↔ |
|
|
|
|
Shift Register |
↔ |
SDA |
| ||
|
|
| ||||||||||
|
PCLK |
→ |
IICCON |
IICSTAT |
|
4Bit Prescaler |
→ |
↕ |
|
|
| |
| ||||||||||||
|
|
|
|
|
|
|
|
Shift Register (IICDS) |
|
|
| |
|
|
|
|
|
|
|
|
↕ |
|
|
| |
|
|
|
|
|
|
|
|
Data Bus |
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
NOTE : IIC Data의 지연시간은 최소 0ns.
(IIC specification v2.1에서의 IIC Data의 지연시간은 Standard/fast 모드에서 0ns)
IIC 컨트롤러는 IIC bus device만을 지원한다.,C bus는 지원안함
S3C2410X IIC-bus interface는 4가지의 오퍼레이션모드를 제공한다.
① Master transmitter mode
② Master receive mode
③ Slave transmitter mode
④ Slave receive mode
용어설명 master - IIC 버스를 이용한 데이터 전송을 시작한 주체 Device. slave - master가 데이터 전송을 하기 원하는 목표 Device.
위의 오퍼레이션모드에 관한 기능적인관련사항은 다음과 같다.
시작상태,정지상태(START AND STOP CONDITIONS)
IIC-bus interface가 비활성일때, 일반적으로 Slave 모드이다. 다른말로 하면 interface는 SDA에서 시작상태(START CONDITION)(START CONDITION은 SLC라인이 HIGH일때 SDA라인에서 HIGH to LOW의 신호 전송함으로써 시작 될 수 있다.)를 감지하기 전까지 Slave 모드이다. interface가 Master 모드로 전환되면, SDA라인을 통한 데이전송은 시작되어질 수 있고, SCL신호는 발생된다.
master가 시작상태(Start Condition)을 시작하였을때, slave 장치를 알리기 위해서 slave address를 전송한다(즉 SDA Line에 slave장치의 주소를 싣는다). 1바이트 중에 7개의 비트는 주소를 포함하고 있으며, 나머지 1개의 비트는 전송의 방향을 나타낸다.(slave로 쓸것인가 읽을것인가를 결정). 8번째 비트가 0이라면 쓰기동작을 의미하며(전송동작), 1이면 slave로부터 데이터를 읽기 위한 요구를 의미한다(수신동작),
master는 정지상태를 전송함으로써 전송을 종료한다. master가 데이터 전송을 계속적으로 하기위해서는 또 다른 시작상태와 slave address을 발생시킨다.
이러한 방법으로 , 읽기,쓰기 동작은 다양한 형태(format)로 실현될 수 있다.
DATA TRANSFER FORMAT(데이타 전송 포맷)
SDA라인에 실려지는 모든 데이터들은 8비트의 길이를 가진다. 바이트들은 전송을 통해 무제한적으로 전송된다. 시작상태이후 오는 첫 번째 바이트는 주소필드를 가지고 있다.
주소필드는 IIC-bus가 master가 Master Mode일때 전송될 수 있다. 모든 바이트들은 한개의 Acknowledgement(ACK)비트가 따라와야한다. 시리얼 데이터의 MSB 비트는 언제나 먼저 보내진다.(ACK비트는 데이터를 받는쪽에서 발생하게 된다.)
Figure 20-3 .IIC-Bus Interface Data Format 참조.
ACK 신호 전송(ACK SIGNAL TRANSMISSION)
한 바이트의 전송을 완료하기 위해서는 데이터를 수신하는 장치는 ACK비트를 송신하는 장치로 전송한다. ACK 펄스는 SCL의 9번째 클럭에서 일어난다. 한 바이트 전송을 위해 8개의 클럭이 요구된다. master는 ACK비트 전송을 위해 요구되는 클럭펄스 발생한다.
발신측(transmitter)은 SDA는 클럭펄스를 받았을때 SDA line을 High로 나타내면서 알린다.
수신측(receiver)는 SDA line를 ACK 펄스동안 Low로 조정한다, 그래서 SDA는 SCL의 9번째 펄스의 High 기간동안 Low를 유지한다.
(표를 보시면 알겟지만 ACK 비트는 데이터를 받는측에서 발생하게 됩니다.)
ACK 비트 전송 기능은 IICSTAT 레지스터를 통한 소프트웨어적인 Enable/Disable이 가능하다. 그러나 SCL의 9번째 클럭펄스인 ACK 펄스는 한 바이트의 데이터 전송을 종료하기 위해서 필요 되어진다.(ACK 비트를 전송하지 않더라도 9번째 비트는 필요하다는 뜻이네요)
일기 쓰기 동작(READ-WRITE OPERATION)
송신자(Transmitter) 모드일때 IIC-bus interface는 IIC-bus Data Shift(IICDS)레지스터가 새로운 데이터를 받을 때까지 기다릴것이다. 레지스터로 새로운 데이터가 쓰여지기 전에 SCL 라인은 Low상태를 유지될 것이고, 데이터가 쓰여진 후 Low 상태유지를 해제한다.
S3C2410X는 현재의 데이터 전송이 종료되었음을 알리는 인터럽트 유지한다(발생한다)
CPU가 인터럽트요구를 받으면, IICDS레지스터로 다시 새로운 데이터를 써 넣는다.
수신자 모드에서, 데이터를 수신했을때 IIC-bus interface는 IIDC레지스터가 읽혀질때까지 대기한다. 레지스터의 값이 읽혀지기 전에 SCL 라인은 Low를 유지하며 데이터가 읽혀졌다면, Low를 유지를 해제한다 (먼말인고 하니 Low를 유지하면 클럭이 뜨더라도 Low가 되므로 데이터를 받을수 없습니다. 따라서 Low유지를 해제하면 클럭을 타고 새로운 데이터를 받게 되는거지요.)
S3C2410X는 새로운 데이터의 수신완료를 알리는 인터럽트를 발생한다. CPU가 인터럽트 요구를 받은후 IIDCS레지스터에서 데이터를 읽는다.
BUS ARBITRATION PROCEDURES( 버스를 중재 절차 : 버스가 충돌 날 때 해결 절차)
중재는 SDA라인 두개의 master간에 버스에 대한 경쟁을 막기위해 존재한다.
어떤 SDA가 High Level인 master가 SDA가 Low Level인 Master를 감지했을때, 이는 데이터 전송을 시작하지 않는데 그 이유는 버스의 현재 SDA Level은 버스에서 받아들여지지 않기 때문이다. 중재 절차는 SDA 라인의 Level이 High가 될 때까지 계속된다.
그러나 master들이 비슷하게 SDA Level이 Low가 되었다면, 각각의 master들은 자신들의 부여되어진 우선권(mastership)을 평가한다.
평가를 위해서 각각의 master들은 slave address 비트를 감지한다. 각각의 master들이 slave address를 데이터를 발생하는 동안에도 데이터버스를 감지하는데 그 이유는 SDA라인은 High를 유지하는것보다 Low상태로 변화할거 같기 때문이다.
다른 마스터가 High 상태를 유지하는 동안 하나의 master가 첫 번째 address bit를 생성한다고 가정할 때, Low 상태는 High 상태보다 우위를 가지기 때문에 Low를 두 master는 Low 상태를 감지하게 될 것이다. 만약 이런 상태가 일어난다면, Low(예를 들어address의 첫 번째 bit )를 발생한 마스터는 High를 발생시킨 master에 우선권을 가지게 되고, High(예를들어 address의 첫 번째비트)를 발생한 master들은 우선권 경쟁에서 빠지게 된다. 만약 두 maste가 address의 첫 번째 bit를 Low로 발생시킨다면 다시 두 번째 비트를 가지고 중재가 일어나게 된다. 이런 중재는 마지막 비트까지 계속 될 것이다.
취소조건(ABORT CONDITIONS)
만약 slave receiver가 slave에 address의 확인을 통보할수 없다면, SDA line을 High로 유지할 것이다. 이 경우, master는 정지상태(STOP CONDITION)을 발생시키고,전송을 취소한다.
만약 master receiver가 취소된 전송상태가 된다면, slave로 받은 마지막 바이트에 대한 ACK 신호발생을 취소함으로써 slave transmit 동작을 종료를 알리게 된다.
slave transmitter는 SDA를 해재함으로써 master가 정지상태(Stop Condition)가 되는 것을 허락하게 된다.
IIC-BUS 설정(CONFIGURING IIC-BUS)
SCL(Serial Clock Line)의 주파수를 조정하기 위해서 IICCON 레지스터의 4-bit precaler 값은 프로그램될 수 있다.(즉 SCL 주파수를 조정할려면 IICCON에 4-bit prescaler를 조정하라는 말입니다.) IIC-bus interface는 IIC-bus address(IICADDR)레지스터에 저장된다.
(기본적으로, IIC-bus interface address는 설정되지 않는 값을 가진다.)
각 모드의 작동흐름도(FLOWCHARTS OF OPERATIONS IN EACH MODE)
다음 열거되는 순서는 모든 IIC Rx/Tx 동작이 일어나기 전에 수행되어야한다.
1) 필하다면 자신의 slave address를 IICADDR 레지스터에 쓴다.
2) IICCON 레지스터를 설정한다.
a) Enable Interrupt
b) SCL의 Period를 정의.
3) IICSTAT를 Serial Output이 가능하게 설정한다.
Figure 20-6 Master/Transmitter Mode를 위한 동작(수행절차)
Figure 20-7 Master/Receiver Mode를 위한 동작(수행절차)
Figure 20-8 Slave/Transmitter Mode를 위한 동작(수행절차)
Figure 20-9 Slave/Receiver Mode를 위한 동작(수행절차)
IIC-BUS INTERFACE SPECIAL REGISTERS
MULTI-MASTER IIC-BUS CONTROL(IICCON) REGISTER | ||||
Register |
Address |
R/W |
Discription |
Reset Value |
IICON |
0x54000000 |
R/W |
IIC-Bus control register |
0x0X |
IICCON |
Bit |
Discription |
Initial State |
Acknowledge generation (note1) |
[7] |
IIC-bus acknowledge enable bit 0 = Disable , 1 = Enable in Tx mode, the IICSDA is free the ack time |
0 |
Tx clock source selection |
[6] |
Source clock of IIC-bus transmit clock prescaler selection bit 0 = IICCLK = fPCLK /16 1 = IICCLK = fPCLK /512 |
0 |
Tx/Rx Interrupt (note 5) |
[5] |
IIC-Bus Tx / Rx interrupt enable/disable bit 0 = Disable , 1 = Enable |
0 |
Interrupt Pending flag (note 2,3) |
[4] |
IIC-bus Tx / Rx interrupt panding flag. This bit cannot be writen to 1. When this bit is read as 1, thie IICCLS is tred to L and thie IIC is stopped. to resume the opration, clear this bit as 0. 0 = 1) No interrupt pending(when read). 2) Clear pending condition & Resume the operation(when write) 1 = 1) Interrupt pending(when read). 2) N/A (when write) |
0 |
Transmit clock value(note 4) |
[3:0] |
IIC-Bus transmit clock prescaler. IIC-Bus transmit clock frequency is determined by this 4-bit prescaler value, according to the following formula: Tx clock = IICCLK(IICCON[3:0]+1) |
Undefined |
NOTE :
EEPROM을 사용할 때 Rx mode에서 정지상태(Stop Condition)을 발생시키키 위한
IIC-bus 의 인터럽트는 다음과 같은 경우에 발생된다.
1) 한 바이트 송,수신이 종료 되었을때,
2) general call이 발생되었을때나 slave address가 일치할 때
3) bus의 중재가 실패했을때
IISSCL가 상승모서리이 다다르기전에 IICSDA를 설정시간을 조정하기 위해서 IIDCS IIC 인터럽트 펜딩비트가 지워지기전에 쓰여져야한다.
4. IICCLK는 IICCON[6]에 의해서 결정된다.
Tx클럭은 SCL 전송시간에 의해서 변화될 수 있다.
IICCON[6]=0 일때,IICCON[0:3]=0x00또는 0x1은 불가능하다.
5. 만약 IICCON[5]=0이면 IICON[4]는 정상적으로 작동하지 않는다. 그러므로, IIC 인터럽트를 사용하지 않터라도 IICCON[5]=1로 설정하기를 권장한다.
MULTI-MASTER IIC-BUS CONTROL(IICCON) REGISTER | ||||
Register |
Address |
R/W |
Discription |
Reset Value |
IICSTAT |
0x54000004 |
R/W |
IIC-Bus control/states register |
0x0 |
IICSTAT |
Bit |
Discription |
Initial State |
Mode selection |
[7:6] |
IIC-bus master/slave Tx / Rx mode select bits 00 : Slave receive mode 01 : Slave transmit mode 10 : Master receive mode 11 : Master transmit mode |
0 |
Busy signal stauts/ START STOP condition |
[5] |
IIC-Bus busy signa status bit 0 = read) Not busy (when read) write) STOP signal generation 1 = read) Busy (when read) write) START signal generation. The data in IICDS will be transferred. automatically just after the start signal |
0 |
Serial output |
[4] |
IIC-bus data output enable/disable bit 0 = Disable Rx / Tx , 1 = Enable Rx / Tx |
0 |
Arbitration status flag |
[3] |
IIC-bus arbitration procedure status flag bit 0 = Bus arbitration successful 1 = Bus arbitration failed during serial I/O |
0 |
Address-as-slave status flag |
[2] |
IIC-bus address-as-slave status flag bit. 0 = cleared when START / STOP condition was detect 1 = Received slave address matchs the address value in the IICADD |
0 |
Address zero status flag |
[1] |
IIC-bus address zero status flag bit 0 = Cleared when START / STOP condition was detected. 1 = Received slave address si 00000000b. |
0 |
Last-received bit status flag |
[0] |
IIC-bus last-received bit status flag bit. 0 = Last-received bit is 0 (ACK was received). 1 = Last-received bit is 1 (ACK was not received). |
0 |
MULTI-MASTER IIC-BUS ADDRESS(IICADD) REGISTER | ||||
Register |
Address |
R/W |
Discription |
Reset Value |
IICADDR |
0x54000008 |
R/W |
IIC-Bus address register |
0xXX |
IICADD |
Bit |
Discription |
Initial State |
Slave address |
[7:0] |
7-bit slave address, latched from the IIC-bus When serial output enable = 0 tin the IICSTAT, IICADD is write-enabled, the IICADD value can be read any time, regardless of the current serial output enable bit (IICSTAT) setting. Slave address = [7:1] not mapped = [0] |
XXXXXXX |
MULTI-MASTER IIC-BUS TRANSMIT / RECEIVE DATA SHIFT( IICDS ) REGISTER | ||||
Register |
Address |
R/W |
Discription |
Reset Value |
IIDCS |
0x5400000C |
R/W |
IIC-Bus transmit / receive data shift register |
0xXX |
IICADD |
Bit |
Discription |
Initial State |
Slave address |
[7:0] |
8-bit data shift register of IIC-bus Tx / Rx operation. When serial output enable = 1 in the IICSTAT, IICDS is write enabled. the IICDS value can be read any time, regardless of the current serial output enable bit (IICSTAT) setting |
XXXXXXX |
2007/11/02 - [임베디드/ARM] - S3C2410 카메라 인터페이스
2007/11/02 - [임베디드/ARM] - S3C2410 IIS
2007/11/02 - [임베디드/ARM] - S3C2410 개요