nRF52 xBee EVM 보드로 I2C IO확장 PCF8574보드를 테스트를 하려고 Arduino 코드를 실행 했는데 I2C가 동작 하지 않는다
nRF5 SDK 의 IAR 툴을 이용하여 I2C 테스트할 때는 문제가 없었는데...
Wirte 함수에서 멈춰 있다.
왜 그렇지?
옵션중에 -DNRF52 가 있는데...
-DNRF52를 DNRF52810으로 해 주어야 하는 것 아닐까?
플래그 설정을 -DNRF52810_XXAA 로 변경하니 에러가 많이 발생한다.
다시 DNRF52로 설정하면 컴파일은 잘 되지만 I2C가 정상 동작 하지 않는다.
NRF_TWIM1 를 0으로 바꾸면 어떨까?
I2C쪽 코드를 살펴보니 TowWire 설정이 NRF_TWIM1로 설정되어 있다.
NRF_TWIM0로 바꾸면 동작 하긴 하지만 TWIM0_TWIS0_TWI0_IRQ가 정의 되어 있지 않다고 에러가 발생 한다.
결국 TWIM0_TWIS0_TWI0_IRQn는 SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQn로 둔채 NRF_TWIM1 만 0으로 바꾸터 테스트 해보면
출력이 되는것을 확인 할 수 있다.
최종적으로 설정한 값
TwoWire Wire(NRF_TWIM0, NRF_TWIS0, SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQn, PIN_WIRE_SDA, PIN_WIRE_SCL);
이제 nRF52 Aduino IDE 에서도 I2C가 잘 동작 한다.
#include <Wire.h>
#define LED_PIN1 18
#define PCF_8574_ADDR 0x20
void write8(uint8_t Address, uint8_t Value)
{
Wire.beginTransmission(Address);
Wire.write(Value);
Wire.endTransmission();
}
void setup()
{
pinMode(LED_PIN1, OUTPUT);
Serial.begin(115200);
Serial.println("PCF8574 test");
Wire.begin();
Serial.println("write.. ");
write8(PCF_8574_ADDR, 0xff);
Serial.println("OK");
}
int cnt = 0;
void loop()
{
if(cnt>8)cnt = 0;
write8(PCF_8574_ADDR, ~(1<<cnt++));
Serial.println(cnt);
digitalWrite(LED_PIN1, 0);
delay(100);
digitalWrite(LED_PIN1, 1);
delay(100);
}
반응형