개요 | |
싸이프레스사의 pSoC, pRoC SCB (Serial Communication Block) 은 I2C, SPI, UART로 설정 가능하다. 본 글에서는 SCB 로 I2C Master 로 설정하고 펌웨어 코드에서 기본코드 작성하는 법 정리한다.
1. 프로젝트의 스키메틱 (확장자 .cysch) 에서 SCB 배치하고 I2C Master 로 기능하도록 속성설정. 2. 펌웨어 코드에서 상기1의 SCB 모듈을 사용가능하도록 기본 코드 추가. 3. I2C 버스에서 지정된 슬레이브로 데이터 송수신 함수 사용법.
본 글 설명에서 사용된 칩과 IDE. 사용되는 타겟칩 : CYBL10162 개발IDE : pSoC Creator 3.2
| |
|
1. SCB 배치하고 I2C 설정. | |
1. Creator 프로젝트의 스키메틱(아래 그림 파박) 선택하고, 오른쪽 Component Catalog 에서 I2C 선택하여 드래그드롭.
2. 배치된 SCB 더블클릭하여 설정작업. Name 에 이름 설정(모듈을 식별하는 고유이름.아래 그림 파박) Configuration 탭에서 I2C 선택.
I2C Basic 탭에서 Mode 를 Master 로 선택. - 설정가능한 옵션 : Master, Slave, Multi-Master, Multi-Master-Slave 가능. Data rate 100 kbps 선택- 설정가능한 옵션 : 50,100, 400, 1000 kbps가능.
나머지 설정은 기본값으로 둬도 됨. 상세하게 설정법을 알고 싶으면 대화상자 하단의 버튼 "DataSheet" 클릭하여 pdf문서에서 확인. 혹은 제조사 웹에서 제공하는 SCB 모듈의 데이터 시트 볼 수도 있다. -> http://www.cypress.com/?rID=78826
| |
|
2. 펌웨어에서 SCB 기능 사용하기 위한 코드 추가. | ||
앞의 1에서와 같이 I2C 를 사용하기 설정은 매우 간단하다. 이제 펌웨어 코드에서 이를 사용하기 위한 코드 추가한다. 아래 코드는 main.c 에서 I2C 모듈을 사용하기 위한 코드 예이다. Start 시키고 slave 측으로 데이터 전송하고 slave 측에서 데이터 읽기 함수를 호출하고 있는 예이다.
위에서 사용된 함수는 일부일 뿐이며, 사용가능한 API 함수들은 http://www.cypress.com/?rID=78826 의 pdf 파일 열어서 "I2C API" 부분에 설명된 함수들을 모두 사용가능하다.
| ||
|
I2C 송수신 함수 | |||||||||||||||||
SCB는 I2C API 함수들이 여럿 제공되고 있다. (http://www.cypress.com/?rID=78826 의 I2C API 부분)
통신에서 필수 명확히 숙지해야할 것은 데이터 송수신이다.
여러 바이트 데이터 송수신 함수.
송신. uint32 SCB_I2CMasterWriteBuf(uint32 slaveAddress, uint8 * wrData, uint32 cnt, uint32 mode) - 인자 slaveAddress : Right-justified 7-bit Slave address (valid range 8 to 120). 주의사항 : 슬레이브 어드레스 를 기록하는 것인데 만일 십진수 8(바이너리 1000) 을 기록했다면 I2C 전송시 바이트 표현은 0001000W,마지막 W는 Write bit 0이 기록되게된다. - 인자로 전달된 버퍼 wrData , 수량 cnt 만큼을 슬레이브(주소 slaveAddress)로 전송한다. - 인자 mode 는 아래 3 종이 있고, OR 로 지정가능.
함수반환값
수신. uint32 SCB_I2CMasterReadBuf(uint32 slaveAddress, uint8 * rdData, uint32 cnt, uint32 mode) - 슬레이브(주소 slaveAddress )로 부터 수신된 데이터를 본 함수 인자로 전달된 수량 cnt 만큼 rdData 로 받는다.
1 바이트 단위 데이터 송수신 함수.
송신. uint32 SCB_I2CMasterWriteByte(uint32 theByte) - 슬레이브로 인자로 전달된 1바이트 전송. - blocking 함수 : 데이터 전송 완료/혹은 에러 발생시까지 함수는 리턴되지 않음.
수신. uint32 SCB_I2CMasterReadByte(uint32 ackNack) 슬레이브로 부터 1바이트 읽기. - blocking 함수 : 읽기 완료/혹은 에러 발생시까지 함수는 리턴되지 않음.
| |||||||||||||||||
|
참고
I2C SCL, SDA핀의 출력예..
아래 사진의 D0(위)이 SCL. D1(아래)이 SDA.
회로상에서는 I2C 슬레이브 없는 상태에서 I2C Master 측에 아래와 같은 코드가 작동중일때이다.
#define I2C_SLAVE_ADDR_EFM8 0x00 /* Packet positions */ /* Start and end of packet markers */ uint8_t buffer[PACKET_SIZE];
/// Initialize buffer with packet |
본 글이 포함된 상위 정리장소
1. MCU http://igotit.tistory.com/244 2. Connectivity : http://igotit.tistory.com/280 |
///327.
'임베디드.일렉트로닉스' 카테고리의 다른 글
BLE Protocol Stack - Bluetooth Low Energy. GAP, GATT, Profile, Service, Characteristic (0) | 2015.06.21 |
---|---|
I2C, SPI, UART bit-banging (0) | 2015.06.13 |
Cypress BLE 모듈 개발보드. - Bluetooth Low Energy. (0) | 2015.06.12 |
USB HUB. 4port USB2.0 High Speed. USB2514칩 기반. (0) | 2015.05.31 |
ACKme사의 wifi 모듈 PC 연결 평가보드 AMW004-E03 (0) | 2015.05.25 |
댓글