현재 비트 뱅킹을 사용하여 SDA 및 SCL 라인을 구동하는 I2C EEPROM 프로젝트를 진행하고 있습니다.
내 읽기 기능은 제대로 작동하지만 선행 "1"로 바이트를 쓸 때마다 항상 FF를 다시 읽습니다. 바이트가 이전에 다른 것으로 프로그래밍 된 경우에도 마찬가지입니다. 선행 "0"은 완벽합니다. 내 읽기 루틴이 아닙니다. 범위에서 볼 수 있듯이 FF를 반환합니다.
이것이 왜 그런지에 대한 제안을 찾고 있습니다. 내가 놓칠 수있는 명백한 문제가 있습니까? [코드를 게시 할 수 없습니다-회사 기밀 정보 ... :(]
내가 보는 모든 파형은 사양을 정확하게 충족시킵니다. EEPROM을 분리하고 있습니다. 내 풀업은 2.2k이므로 사양 내에 있습니다. 이 프로토 타입에서 약 500Hz로 클럭킹하고 있습니다. 칩이 각 바이트에 ACK를 보내서 인식합니다. 그러나 그것은 작동하지 않습니다 ...
Microchip 24LC256을 사용하고 있습니다.
1 바이트에 대한 단순화 된 쓰기 알고리즘 :
wait
SDA low
SCL low
wait
for each bit
if bit is set: SDA high
if bit is unset: SDA low
wait
SCL high
wait
wait
SCL low
wait
wait
SDA high
SCL high
wait
wait
check ACK status
SDA low
SCL low
wait
return ACK status
1 바이트에 대한 단순화 된 판독 알고리즘 :
wait
SCL low
SDA high
for each bit (8 bits)
SCL high
wait
wait
SCL low
wait
check and store received bit
wait
do a NACK or ACK depending on if it is the last byte