Стечение обстоятельств

1. AVR не снимает адрес с шины адреса после окончания чтения/записи.
2. AS7C256 не может нормально работать с постоянно активным выводом CE (Chip Enable), далее RAM CS.
Пока я понял это — сгорела пара RAM :) Ибо эффект проявлялся нестабильно. Если после доступа к памяти AVR-ка шла во внутреннюю память, то всё было хорошо. А если останавливалась, то память перегревалась и горела! (Что интересно, datasheet говорит, что AS7C256 кушает в активном режиме 660мВт, но ничего не говорит, что этот самый активный режим лучше не держать долго… по факту у меня срабатывало ограничение на БП в 0.5А).
В результате возникла интересная задача.
Схема была на макетке, из микросхем там стояли только 74HC/74AHC. На них то я и решил сделать костыль. Выбор пал на 74HC74.

(Извините за качество картинки ;)
Что и куда подключается?
ACC — это, по сути, объединённые WR + RD. Если быть точным ACC = WR & RD. (Чтение/запись, выходящие из AVR, инверсные, и ACC тоже, поэтому вместо ИЛИ написано И).!ALE — инвертированный ALE.
RAM CS — единица, если по данному адресу надо пойти в память (можно просто притянуть к единице, можно сконструировать некоторую схему, которая будет резать память на нужные регионы).
!RAM CS — тот сигнал, который подаётся на AS7C256.
Как работает?
Схема состоит их двух триггеров. Правый — основной, левый — вспомогательный.Правый триггер «передаёт» сигнал RAM CS со входа на выход. Микросхема 74HC74 защёлкивает данные по фронту импульса, в данном случае по фронту инверсного ALE (или по спаду того ALE, что выходит из AVR). Это приводит к «включению» RAM.
По фронту инверсного RD (WR) происходит защёлкивание единицы во вспомогательном триггере, которая приводит к немедленному сбросу основного триггера и «выключению» RAM.
В результате сигнал RAM CS активен с момента спада ALE до момента фронта RD (WR).
Следующий импульс инверсного ALE своим спадом сбросит вспомогательный триггер, в результате сигнал сброса будет снят и с основного триггера, что позволит ему выставить CS по фронту инверсного ALE.
Вот что говорит осциллограф:

Дорисовал пару линий, чтоб было видней моменты переключения CS:

Память больше не перегревается. На сколько стабильно всё работает пока не понятно, ибо саму прошивку ещё пилить и пилить :)
- +3
- 02 января 2016, 02:07
- JustMoose
Всегда считал что статической RAM на основе триггерных ячеек глубоко фиолетово, есть «чип енабле», нет его. Какая разница триггеру? Пробовал на TE12512A-15K (TM TECH), UM61512AK-15 (UMC), влияния на работоспособность и температуру не заметил.
Было пару раз с КР537РУ10 в кроватке… переходила в КМОП-тригерный режим после манипуляций шаловливыми пальчиками… дико грелась… после остывания продолжала работать.
Как понимаю из-за статики с рук и отсутствия подтягивающих резисторов
Как понимаю из-за статики с рук и отсутствия подтягивающих резисторов
1During VCC power-up, a pull-up resistor to VCC on CE is required to meet ISBАналогичному триггерному эффекту подвержены были микросхемы 176-ой серии… в 561-ой поставили защитные диоды (вроде)…
specification
Хм… Стопиццот лет тому назад у меня работала похожая связка. Сейчас уже и не вспомню, но вроде CS тоже всегда на земле была. Может проблема с конфликтом выводов в шине адреса/данных?
«ACC — это, по сути, объединённые WR + RD»
А для чего их объединять? Мне казалось (давно дело было, но по-моему я так включал), что WR должен подаваться на WE, а RD на OE, может что-то не так делаете? Или я что-то перепутал?
А для чего их объединять? Мне казалось (давно дело было, но по-моему я так включал), что WR должен подаваться на WE, а RD на OE, может что-то не так делаете? Или я что-то перепутал?
ага, не сразу увидел «У меня выводы OE/WE памяти намертво запаяны на RD/WR AVR-ки», т.е. они все-таки раздельные подаются… Полную схему бы подключения — было бы яснее, а может быть и понятнее, почему что-то не так…
Пардон, полной схемы пока нет… Там всё слишком запущено!
Но я надеюсь, что причину я нашёл правильную.
Но я надеюсь, что причину я нашёл правильную.
Я имел в виду только ту часть, где задействованы сигналы ADDR, DATA, ALE, WR, RD и CS. И что за сигнал R на осциллограмме? Абсолютно правильно выше сказал Mihail — такой эффект обычно наблюдается при конфликте на шине адреса/данных.
Схема такая:

Блок с пометкой magic — это декодер адреса. Режет адреса так, чтобы ОЗУ работала в диапазоне от 1КБ до 32КБ (вообще, правильней было бы от 608 байт, но, так оказалось проще).
Я вполне допускаю, что декодер адреса лажает, но, влиять это ни на что не должно. Потому что ATmega выдаёт нормальные сигналы на WR/RD и никогда не перепутает внутреннюю и внешнюю память. А с тем, что с CS могут быть проблемы я как раз и разбирался в тексте выше.
R на осциллограмме это сброс основного триггера (который выставляет CS).

Блок с пометкой magic — это декодер адреса. Режет адреса так, чтобы ОЗУ работала в диапазоне от 1КБ до 32КБ (вообще, правильней было бы от 608 байт, но, так оказалось проще).
Я вполне допускаю, что декодер адреса лажает, но, влиять это ни на что не должно. Потому что ATmega выдаёт нормальные сигналы на WR/RD и никогда не перепутает внутреннюю и внешнюю память. А с тем, что с CS могут быть проблемы я как раз и разбирался в тексте выше.
R на осциллограмме это сброс основного триггера (который выставляет CS).
Ну и остальные адреса ОЗУ наверное на земле? Ну или хотя бы на +Uпит? Или хотя бы кто-где, но логически определены?
Память довольно шустрая, от 35 ns вплоть до 10 ns, в зависимости от циферок на конце наименования. Пока неизвестно какая у Вас, но вполне возможно, что уже влияет печать или провода (не знаю как подключено сейчас). На длинных проводах могут быть заметные гонки сигналов, может быть дело в этом? Конфликт шины может быть из-за преждевременного чтения ОЗУ, я бы попробовал просто прогнать сигнал RD (OE) через пару инверторов, задержав тем самым его на несколько ns и одновременно выровняв с задержкой сигнала CS на дешифраторе.
Не знаю, чем можно измерить, когда именно происходит нагрев. Можно только косвенно оценить ситуацию, в которой это происходит. А конфликтуют, как правило, данные и младший адрес, например если чтение (открывание выходного буфера ОЗУ) происходит раньше, чем снимается младшая часть адреса на процессоре и он переходит в режим чтения. Тут бы хороший щуп с малой входной емкостью, развертку импульса CS на весь экран, синхронизацию от его спада и все сигналы относительно этого момента и друг-друга хорошенько посмотреть.
Кстати, что у Вас на осциллограммах, два обращения к памяти (наверное запись, потом чтение) ??
Кстати, что у Вас на осциллограммах, два обращения к памяти (наверное запись, потом чтение) ??
Комментарии (17)
RSS свернуть / развернуть