Зараз я працюю над проектом I2C EEPROM, використовуючи біт-удари для керування лініями SDA та SCL.
Моя функція читання працює добре, але коли я пишу будь-який байт з провідним "1", я завжди читаю FF назад; навіть якщо байт раніше був запрограмований на чомусь іншому. Ведучий "0" ідеальний. Це не моя читання; як я бачу, за обсягом він повертає FF.
Я шукаю пропозиції, чому це може бути. Чи є явне я можу пропустити, що могло б викликати проблему? [Я не можу розмістити код - конфіденційність компанії ... :(]
Кожна форма хвилі, на яку я дивлюсь, точно відповідає специфікації. Я відокремлюю EEPROM. Мої підтяжки складають 2,2 тис. Т. В межах специфікації. Я працюю на частоті приблизно 500 Гц у цьому прототипі. Чіп надсилає ACK до кожного мого байта, щоб він їх розпізнавав. Але це просто не працює ...
Я використовую Microchip 24LC256 .
Спрощений алгоритм запису на один байт:
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
Спрощений алгоритм читання на один байт:
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