maze통신교육 i2c

20
통통 통통 – I2C 통통 MAZE I2C 통통 (23 통 통통통 )

Upload: geonhee-kim

Post on 13-Feb-2017

76 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Maze통신교육   i2c

통신 교육 – I2C 통신 MAZE

I2C 통신 (23 기 김은정 )

Page 2: Maze통신교육   i2c

개요

TMS320F28x 프로세서에 탐재되는 통신회로 중 SPI/SCI/I2C/CAN 에 대한 특징과 동작 구조를 이해하고 통신을 해보자는 의미에서 공부한다 .

Page 3: Maze통신교육   i2c

목차01. SPI 통신02. SCI 통신03. I2C 통신04. CAN 통신

Page 4: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

I2C 란• 디바이스를 두개의 신호선으로 제어 가능한 통신• 대부분의 디바이스들은 7 비트 형식의 주소를 사용하기 때문에 그 경우 마스터가 지정할 수 있는 장치는 128 개이다 .

•SDA(serial DATA): - 데이터를 전송하기 위한 신호 - 마스터와 슬레이브 사이의 양방향 신호•SCL(serial CLOCK): - 마스터와 슬레이브를 동기화 - 항상 마스터가 발생시킴 , 단방향 신호

Page 5: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

I2C 통신의 장 / 단점•장점 : - 클럭신호를 사용하는 동기식 통신으로 시간이 자유로움 - 多 : 多 통신이 가능함 •단점 : - 슬레이브 선택을 위해 주소데이터가 붙기 때문에 , 긴 데이터에 부적합 - 같은종류를 다중으로 연결시 고유 address 가 동일하기때문에 동시제어가 불가능

Page 6: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

· r/w = 0 → 마스터가 슬레이브에 데이터를 전달한다 . r/w = 1 → 마스터가 슬레이브의 데이터를 전달받는다 .

· ack – 슬레이브가 내보내는 신호이며 마스터는 이 신호를 보고 데이터 전송이 성공적인지 판단함 ack 비트는 주소 , 데이터 프레임의 끝에 항상 붙음

Page 7: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

interrupt

Basic I2C Interrupt Request : 여러 개가 한번에 걸릴 수 없고 arbiter 에 의해 한 개가 선택되어 걸린다 .

FIFO 복수의 신호가 있을 때 처리의 우선순위를 매기지 않고 제일 먼저 들어온 신호 순대로 처리하는 방식

Page 8: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

I2c 통신 규칙상 SDA & SCL 은 pull up 되어야 한다 .

1. 초기화

Page 9: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

I2caRegs.I2CSAR = (0x00e0 >> 1); // Slave Address.여기서 DSP 에서 사용시에는 slave address 의 마지막 bit 는 r/w 1bit 를 포함하므로 1bit shift해준다 .

I2caRegs.I2CPSC.all = 79; 다음은 통신속도클락를 조절하는 레지스터인데 , 값이 너무 작으면 통신속도가 너무 빨라서 통신이 안되는 경우도 있으니 적당한 값을 설정해준다 .

Page 10: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit) • 클락이 안나오는경우sysctrl.c 에 들어가서 클락을 on 시켜줘야 한다 .>> SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1;

• Interrupt 설정여느 interrupt 설정과 같이 pievecter table 에 따라 인터럽트 설정을 해준다 .

Page 11: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit) 2. 통신 rx/tx

통신 규칙에 따라 1. START 신호를 보내고2. SLAVE ADDRESS bit 를 보내고3. DATA 를 보내고4. DATA 를 받고

Page 12: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

void I2C_tx_Uint16data(Uint16 data){

I2caRegs.I2CCNT = 1; //1byte 명령어 txI2caRegs.I2CDXR = data; //i2c data transmit register

I2caRegs.I2CMDR.all = 0x6e20; }

void I2C_rx_Uint16length(Uint16 length){

g_u16data_length = length;I2caRegs.I2CCNT = length;

I2caRegs.I2CMDR.all = 0x2c20;}

I2CCNT register – data count register 로 data 의 길이를 정하고I2CDXR register – data transmit register 로 data 를 받는다 !

Page 13: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

I2caRegs.I2CMDR.bit.BC = 0; // 2:0 Bit countI2caRegs.I2CMDR.bit.FDF = 0; // 3 Free data format

I2caRegs.I2CMDR.bit.STB = 0; // 4 Start byteI2caRegs.I2CMDR.bit.IRS = 1; // 5 I2C Reset notI2caRegs.I2CMDR.bit.DLB = 0; // 6 Digital loopbackI2caRegs.I2CMDR.bit.RM = 0; // 7 Repeat mode

I2caRegs.I2CMDR.bit.XA = 0; // 8 Expand addressI2caRegs.I2CMDR.bit.TRX = 1/0; // 9 Transmitter mode

Receive modeI2caRegs.I2CMDR.bit.MST = 1; // 10 Master modeI2caRegs.I2CMDR.bit.STP = 1; // 11 Stop condition

I2caRegs.I2CMDR.bit.rsvd1 = 0; // 12 reservedI2caRegs.I2CMDR.bit.STT = 1; // 13 Start conditionI2caRegs.I2CMDR.bit.FREE = 0; // 14 Emulation modeI2caRegs.I2CMDR.bit.NACKMOD = 0; // 15 No Ack mode

* I2CMDR register 의 설정

I2caRegs.I2CMDR.bit.TRX 에 따라 수신과 송신의 mode 를 결정한다 !!

Page 14: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

24 (0x18) gives a range of 1 metre and 93 (0x5D) is 4 metres.

3. Command 설정

사용한 초음파 센서의 경우 결과값의 단위 등 설정 값을 명령해주는 단계로 뒤의 I2cwrite 함수로 command 를 해준다

Page 15: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

사용한 초음파 센서의 경우 datasheet 에서와 같이 3 번 command 를 해줌으로써 명령에 해당되는 주소 값을 전달해준다 .

Page 16: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

I2caRegs.I2CMDR.bit.BC = 0; // 2:0 Bit countI2caRegs.I2CMDR.bit.FDF = 0; // 3 Free data format

I2caRegs.I2CMDR.bit.STB = 0; // 4 Start byteI2caRegs.I2CMDR.bit.IRS = 1; // 5 I2C Reset notI2caRegs.I2CMDR.bit.DLB = 0; // 6 Digital loopbackI2caRegs.I2CMDR.bit.RM = 0; // 7 Repeat mode

I2caRegs.I2CMDR.bit.XA = 0; // 8 Expand addressI2caRegs.I2CMDR.bit.TRX = 1/0; // 9 Transmitter mode

Receive modeI2caRegs.I2CMDR.bit.MST = 1; // 10 Master modeI2caRegs.I2CMDR.bit.STP = 1; // 11 Stop condition

I2caRegs.I2CMDR.bit.rsvd1 = 0; // 12 reservedI2caRegs.I2CMDR.bit.STT = 1; // 13 Start conditionI2caRegs.I2CMDR.bit.FREE = 1 ; // 14 Emulation mode(free)

if) = 0; // 14 master modeI2caRegs.I2CMDR.bit.NACKMOD = 0; // 15 No Ack mode

Write 함수의 register 설정으로 I2caRegs.I2CMDR.bit.FREE 의 값을 1 로 둠으로 써 마스터 모드가 아닌 자유로운 모드 상태에서 명령을 해준다 .

Page 17: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

앞서 command 를 참고하여명령을 해준뒤 , data 를 받겠다는 0x02 주소값을 보낸뒤 2byte 의 센서값을 받는과정이다 . 이 과정에서 command 를 받기 위해 조금의 delay 를 걸어주기 위해 interrupt 를 사용하였다 .

Page 18: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

0x0004 (100) 일 때 data 를 받을 준비가 되어 data 를 받게 된다 .

4. Interrupt 설정

Page 19: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit)

앞선 interrupt INTCODE 에 따라서 100 의 명령일 때 데이터를 받는다 . 사용한 초음파 센서는 2byte 의 센서값을 내보내기 때문에 , 결과값을 비트연산을 이용하여 저장하였다 .

Page 20: Maze통신교육   i2c

03. I2C 통신 (Inter-Integrated Circuit) 통신결과

• I2C 통신을 이용한 초음파 센서값을 확인할 수 있다 .