Ниспадающий фронт AVR обгоняет ниспадающий фронт ARM :-(
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
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 в схеме порта. Наколько он большой ?
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Не... диагноз неверный. АВРу на определение воздействия на порт нужно ДВА такта ОСЦ... — -mse- (30.09.2005 11:11 81.201.66.34, 485 байт)
- Ответ: Все правильно. Но хотелось бы иметь фронты ARM'а круче и этим решить все проблемы. Почему с 7407 ( ТТЛ вход) все работает нормально, а с AVR входом нет ? — vit2005 (30.09.2005 11:25 80.254.3.98, пустое)
- Потому что 7407 раза в два медленнее АВРа по рабочим частотам. И то, лимитирует АВРа тока флэшь — -mse- (30.09.2005 12:27 81.201.66.34, 1185 байт)
- Ответ: Обнаружил новые сюрпризы ARM'a :-( — vit2005 (30.09.2005 12:58 80.254.3.98, 800 байт)
- Ну и флаг, пусть присоединяются... — -mse- (30.09.2005 13:07 81.201.66.34, 53 байт)
- Ответ: Да я знаю, что LPC имеет 5V толерантные входы. Но проблема в том, что я хочу понять почему одни линии АРМ'а генерируют нормальный фронт, а другие дефективный. Похоже что I2C линии ARM'a не могут сгененировать нормальный фронт даже, если они сконфигурированы как GPIO — vit2005 (30.09.2005 13:14 80.254.3.98, пустое)
- Выводы I2C у LPC требуют pull-up резисторов даже если они как GPIO работают. — rezident (30.09.2005 13:30 212.33.249.11, пустое)
- Ну, мож как раз по той причине, что я тебе писал. Дабы не было чего, завалили при выпечке. Для 400кГц хватает? До свиданья. Кстати, они могут быть изначально ОК(ОС), а там хороших фронтов не дождёшься. — -mse- (30.09.2005 13:19 81.201.66.34, пустое)
- Ответ: Картину ушлости АВР можно посмотреть здесь — vit2005 (30.09.2005 13:54 80.254.3.98, пустое, картинка)
- Ответ: Согласен. На I2C линиях схемотехника может быть другая.Другого объяснения пока нет. Но меня удивляет AVR.Я согласен, что ему нужно как минимум два цикла.В первом он проверяет, что была "1".Во втором, что появился "0". Но ведь все происходит не так.ARM только начинает тянуть SCL вниз. А AVR уже определил, что SCL пошла вниз.Другими словами, AVR начинает тянуть SDA вниз, когда SCL достигла только 4.5V.Как он это делает? Это удивительно, но факт. проверил несколько раз, н — vit2005 (30.09.2005 13:33 80.254.3.98, пустое)
- А может ключи горбатые? — Codavr (30.09.2005 10:57 193.233.48.103, пустое)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru