2013-05-31 1 views
2

개별 장치의 EEPROM에 동작을 구성하려면 장치에 쓰기를 시도하고 Arduino Uno로 장치를 제어하고 있습니다. this webpage 따른SPI를 사용하여 외부 EEPROM에 쓰기

로 내 SCK 13 핀에 접속되고, 내 SDA 내가 this example 찍은 두 가지 기능과 i2c_eeprom_write_bytei2c_eeprom_read_byte를 가지고 11

핀에 연결된다.

void i2c_eeprom_write_byte(int deviceaddress, unsigned int eeaddress, byte data) { 
    Wire.begin(deviceaddress); // MUST INCLUDE, otherwise Wire.endTransmission hangs 
    // called once, in setup 
    int rdata = data; 
    Wire.beginTransmission(deviceaddress); 

    Wire.write((int)(eeaddress >> 8)); // MSB 
    Wire.write((int)(eeaddress & 0xFF)); // LSB  
    Wire.write(rdata); 

    Wire.endTransmission(false); 

} 
byte i2c_eeprom_read_byte(int deviceaddress, unsigned int eeaddress) { 
    byte rdata = 0xFF; 
    Wire.beginTransmission(deviceaddress); 
    Wire.write((int)(eeaddress >> 8)); // MSB 
    Wire.write((int)(eeaddress & 0xFF)); // LSB 
    Wire.endTransmission(); 
    delay(10); 
    Wire.requestFrom(deviceaddress,1); 


    int avail = Wire.available(); 
    Serial.println(avail); 
    if (Wire.available()) rdata = Wire.read(); 

    // there's a bug here with Wire.available. It's returning 0 (ie, 0 bytes to be read), 
    // when it should be returning 1, since I want 1 byte. 

    return rdata; 
} 

내 문제는 Wire.available() 항상 슬레이브 장치는 마스터 장치, 아두 이노에 아무 것도 전송되지 않는다는 것을 의미하는 0을 반환한다는 것입니다.

슬레이브 장치에서 읽는 방법은 무엇입니까?

답변

0

오실로스코프 또는 로직 분석기가없는 하드웨어 디버깅이 어려울 수 있습니다.

간단한 이중 확인은 주소 핀이 사용자가 코딩 한 주소를 구성하기 위해 배선되어 있는지 확인하는 것입니다. 운이 좋다면 잘못된 주소를 찾아 수정하고 모든 것이 작동하기 시작합니다.

디버깅 방법에주의하십시오. 추가 한이

delay(10); 

100 Kbit에서/s의 (이상)에서 작동하는 장치에 대한 시간의 거대한 양이다. 지연은 의사 소통을 방해하는 것과 마찬가지로 의사 소통을 방해 할 수 있습니다. 장치에 대해서는 언급하지 않지만 큰 멈춤을 견딜 수 있는지 여부를 확인하십시오. 메모리에 쓰기는 수행하는 데 시간이 걸릴 수 있지만 읽기는 100 kHz 클럭 속도에 비해 거의 즉시입니다.

마찬가지로, 트랜잭션

println(... 

중간에이를 첨가하는 것은 문제의 일부가 될 수있다. 시리얼을 기본 9600 보오 (baud)로 설정하면 해당 한 문자를 전송하면 I2C 트랜잭션이 중단됩니다.

범위가있는 경우 제공 할 수있는 유일한 방법은 SDA 및 SCL을 로직 1 인 전압으로 끌어 오지만 Vcc (5V)에는 맞지 않는 저항 분배기 쌍으로 풀업 저항을 교체하는 것입니다. 너의 경우?). 예를 들어, 4.8V에서 라인을 유지하는 한 쌍의 저항을 선택하십시오.이 배열을 사용하면 버스를 구동하는 장치가없는 장치와 논리 1을 구동하는 장치의 차이를 알 수 있습니다.

2

I2C SPI 장치에 쓸 라이브러리 - 그들은 동일하지 않습니다! 대부분의 외부 EEPROM은 I2C를 사용합니다 (Uno에는 핀 4 & 5를 사용).