Ниспадающий фронт AVR обгоняет ниспадающий фронт ARM :-(
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено vit2005 30 сентября 2005 г. 10:49

На плате установлено два процессора LPC2138 и ATTINY2313.
Общаются через I2C интерфейс. ARM - мастер.
LPC2138 запитан от 3.3В , AVR запитан от 5В.
Для согласования установлены 3В<->5V SN74CBTD3861DGV ключи.
Подтягивающие резисторы = 3.3K c двух сторон.
Все работает прекрасно, если подсоединены щупы осциллографа
к SDA и SCL. Как только щупы отсоединены, ARM останавливает
генерацию SCL при приеме данных прямо в середине получаемого байта.
На четвертом импульсе.
Получается следующая ситуация.
Например AVR желает передать 0x31.Все работает вплоть до четвертого бита ( 0011).
Начало 4-го бита начинается нормально. SDA высокий. ARM генерирует восходящий SCL фронт
и считывает 4-й бит. Затем начинается самое интересное. ARM начинает тянуть SCL вниз.
AVR очень быстро определяет, что ниспадающий фронт SCL уже начался.
AVR описание упоминает об "clock edge detector". Подробной информации не нашел.
Но штука эта работает прекрасно. AVR начинает тянуть линию SDA ( чтобы передать
следующий бит =0) уже при падении напряжения на 0.4V. Т.е. ARM только успевает
притянуть линию SCL от 5V к 4.6V, а умник AVR уже определил, что фронт SCL уже начат
и надо тянуть SDA вниз также. AVR тянет SDA вниз и при этом успевает обогнать
SCL, который тянет ARM. В результате имеется лог "1" на SCL и переход 1->0 на SDA.
ARM логика определяет потерю арбитража и сбрасывает операцю чтения.
STAT регистр ARM выдает 0x00. Такого кода возврата даже не описано в описании.
Все решается при помощи 33pF на линии SDA. Но решение это не очень корректное :-(


ARM описание говорит, что время перехода 1->0 = 5ns.
AVR описание говорит, что время перехода 1->0 = 50ns.
Я измерил время реальных переходов на плате с ключами.
AVR - 40 nS, ARM - !!! 150 nS !!!
Причем интересная вещь. ARM тянет те же 40ns через ключ,
если нагрузка один вход 7407.
И ARM тянет !!! 150ns !!! через ключ, если нагрузка один вход AVR PORTB ( DDRB = 0, PORTB = 0, MCUCR = 0x80).
Нагрузочная способность AVR порта = 1мкA. Это не должно быть поблемой.
В описании на AVR нарисован Cpin в схеме порта. Наколько он большой ?



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru