artymen 0 28 апреля, 2010 Опубликовано 28 апреля, 2010 · Жалоба У меня две КМОП-микрухи разделяют общую шину данных. Что, если периодически будут возникать коллизии не дольше, чем на 8.5 нс, с интервалом, во-много раз большим ? Не выгорят ли выводы сразу, или, того хуже, не заглючит ли устройство ни с того ни с сего, скажем, через полгода ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 28 апреля, 2010 Опубликовано 28 апреля, 2010 · Жалоба Сразу не выгорят. А вот гарантию, что устройство через месяц-полгода-год-пять лет не накроется, никто, увы, не выпишет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 28 апреля, 2010 Опубликовано 28 апреля, 2010 · Жалоба ИМХО попахивает кривизной дизайна. Коллизии там возникать не должны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
proxi 0 28 апреля, 2010 Опубликовано 28 апреля, 2010 · Жалоба У меня две КМОП-микрухи разделяют общую шину данных. Что, если периодически будут возникать коллизии не дольше, чем на 8.5 нс, с интервалом, во-много раз большим ? Не выгорят ли выводы сразу, или, того хуже, не заглючит ли устройство ни с того ни с сего, скажем, через полгода ? сразу не выгорят, выход КМОПа это сопротивление 50-100 Ом, от глюков впрочем никто не застрахован... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artymen 0 28 апреля, 2010 Опубликовано 28 апреля, 2010 (изменено) · Жалоба У моего МК просто очень мало свободных ног осталось, и я экономлю их, нагромождая внешнюю логику. И все шикарно выходит, за исключением этой мизерной коллизии, которая возникнет из-за того, что из-за медленности МК я вынужден выставлять сигнал выбора чипа (/CS) уже вместе с данными (заранее, т.к. принимающая память быстрее МК, в следующем такте уже опоздаю). /CS при этом через инвертор переведет другой чип в Hi-Z состояние, но это произойдет, к сожалению, с задержкой, в то время как данные микроконтроллером уже будут выставлены. (Кстати, я забыл что надо еще добавить задержку инвертора, я микросхему конкретную пока еще не выбрал.) Значит даже эти кратковременные коллизии вредны и есть реальная необходимость реализовать задержку (хотя бы элементарно RC-цепочкой) ? Впрочем, мне придется аж 8 линий задержать... Изменено 28 апреля, 2010 пользователем artymen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 28 апреля, 2010 Опубликовано 28 апреля, 2010 · Жалоба А тактовую поднять, чтобы все успевало? Хотя непонятно, почему CS и данные у вас выставляются одновременно, это на каком контроллере и какой программой вы так сумели? И почему, если внешняя память быстрая, нельзя сначала выставить данные, а следующей командой CS, как и положено по временным диаграммам? Потому как с вашими гонками на краю допустимых временных соотношений, вы еще можете получить и нестабильную/ненадежную запись во внешнюю память. Даже при том, что КМОП выходы не грохнутся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stells 12 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба а по-моему вообще ничего страшного, сквозные токи в КМОП-логике - штатная ситуация Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба У моего МК просто очень мало свободных ног осталось, и я экономлю их, нагромождая внешнюю логику. И все шикарно выходит, за исключением этой мизерной коллизии, которая возникнет из-за того, что из-за медленности МК я вынужден выставлять сигнал выбора чипа (/CS) уже вместе с данными (заранее, т.к. принимающая память быстрее МК, в следующем такте уже опоздаю). /CS при этом через инвертор переведет другой чип в Hi-Z состояние, но это произойдет, к сожалению, с задержкой, в то время как данные микроконтроллером уже будут выставлены. (Кстати, я забыл что надо еще добавить задержку инвертора, я микросхему конкретную пока еще не выбрал.) Значит даже эти кратковременные коллизии вредны и есть реальная необходимость реализовать задержку (хотя бы элементарно RC-цепочкой) ? Впрочем, мне придется аж 8 линий задержать... Была в свое время идея - сделать на КМОП выход с открытым стоком ( готовых было не достать ) путем сжигания верхнего транзистора. Постигла неудача - транзистор нагревается и перестает пропускать большой ток. Удалось только выжечь выход полностью да и то, с большим трудом. Вы инвертор поставте на быстром КМОП типа LVC ( у него задержка меньше наны ). Да и буфер тоже. Стоят они столько же, если не дешевле HC и точно дешевле 4000_ных. А коллизии - плохо из за повышенного потребления и наводок. Сжечь ими КМОП вряд ли удастся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artymen 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 (изменено) · Жалоба А тактовую поднять, чтобы все успевало? Хотя непонятно, почему CS и данные у вас выставляются одновременно, это на каком контроллере и какой программой вы так сумели? И почему, если внешняя память быстрая, нельзя сначала выставить данные, а следующей командой CS, как и положено по временным диаграммам? Потому как с вашими гонками на краю допустимых временных соотношений, вы еще можете получить и нестабильную/ненадежную запись во внешнюю память. Даже при том, что КМОП выходы не грохнутся. Тактовая частота поднята до предела. CS и данные выставляются одновременно, потому что если я сначала выставлю CS, то память прочитает невыставленные данные быстрее, чем МК в следующем такте успеет их выставить. А если я еще данные выставлю раньше CS, то коллизия возрастет еще больше, т.к. CS схемотехнически переводит другой чип в Hi-Z, а не МК отдельным сигналом. Никаких гонок нету, если конечно не окажется, что МК не одновременно обновляет состояния своих выводов Вы инвертор поставте на быстром КМОП типа LVC ( у него задержка меньше наны ). Да и буфер тоже. Стоят они столько же, если не дешевле HC и точно дешевле 4000_ных. Я делаю опытный образец, а живу в замечательном мухосранске под названием Омск, и я рад, что вообще нашел в крупнейшем в городе радиотехническом магазине буфер 74AC374N, а уж о разновидностях типа HC, LVC, да даже различных корпусах и не смею мечтать. Ну вот больше людей пишет, что лучше так не делать. Придется, наверно, на CS сделать такую задержку, чтобы он задержался на такт, за которым уже МК подоспеет и выставит данные. Но я даже не знаю быстродействие портов МК. Где-то читал, что LPC2103 переключает ноги с частотой не более 17МГЦ (и это в т.н. быстром режиме !), в то время как частота проца 60 МГц... Вроде нашел. В даташите приведен ассемблерный код, переключающий пины, и скриншот осциллографа http://file.qip.ru/file/127355853/eddd6793...lipboard01.html Объясните, пожалуйста, что обозначают частоты внизу и что означают числа сверху ? Изменено 29 апреля, 2010 пользователем artymen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kool 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба Какая а Вас стоит память? И как она включена? а то я что-то не могу понять, куда она спешит, и почему нельзя данные подавать чуть позже CS. ...то память прочитает невыставленные данные быстрее Т.е. у Вас процессом записи в память у Вас управляет не контроллер, а какая-то иная часть схемы? Обычная статическая память по спаду /CS (или /WЕ) считывает адрес, а по фронту сигнала /CS (или /WЕ) пишет(сохраняет) данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artymen 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 (изменено) · Жалоба асинхронная SRAM-память K6R4008C1D. но это не ей нужно, а мне :) просто обычно принято, что процессор намного быстрее памяти, а у меня наоборот, и отсюда такие фокусы :) Т.е. у Вас процессом записи в память у Вас управляет не контроллер, а какая-то иная часть схемы? нет. я уже четвертый раз объясняю: память, получив сигнал CS считывает с шины данные спустя 10нс, это значит, что МК ДОЛЖЕН успеть за это время их выставить, но следующий такт наступит только через 17нс, а указанные в этом такте данные выставятся еще спустя через 34 нс (если я правильно понимаю быстродействие портов МК). едниственный способ сократить эту задержку (а точнее, вообще убрать) - одновременно выставить и CS и данные, но сигнал CS помимо своей основной функции отключает другую конфликтующую микросхему от шины, но происходит это с задержкой, и пока та микросхема будет отключаться 8.5 нс, ее данные будут конфликтовать с уже выставленными МК данными. Я могу, конечно, сначала отключить ту микросхему отдельным сигналом, после чего спокойно записывать в память, но это потребует дополнительного пина МК, а пины дефицитные Изменено 29 апреля, 2010 пользователем artymen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vallav 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба Я делаю опытный образец, а живу в замечательном мухосранске под названием Омск, и я рад, что вообще нашел в крупнейшем в городе радиотехническом магазине буфер 74AC374N, а уж о разновидностях типа HC, LVC, да даже различных корпусах и не смею мечтать. AC очень неудачный вариант. Задержки у ней порядка 2 нан, но сквозные токи при переключении - очень большие, что приводит к довольно сильным помехам на питании. Ну вот больше людей пишет, что лучше так не делать. Придется, наверно, на CS сделать такую задержку, чтобы он задержался на такт, за которым уже МК подоспеет и выставит данные. Но я даже не знаю быстродействие портов МК. Где-то читал, что LPC2103 переключает ноги с частотой не более 17МГЦ (и это в т.н. быстром режиме !), в то время как частота проца 60 МГц... Вроде нашел. В даташите приведен ассемблерный код, переключающий пины, и скриншот осциллографа http://file.qip.ru/file/127355853/eddd6793...lipboard01.html Объясните, пожалуйста, что обозначают частоты внизу и что означают числа сверху ? Что на картинке - увы, без подробностей не понятно. Не знаю как LPC2103, а вот LPC1768 переключает внешние ноги вполне быстро. Вполне получаются 10 нс импульсы на тактовой в 100 Мгц. Но толку то от этого... Квитирующих сигналов ведь нет. У Вас цикл вывода как организован? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artymen 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 (изменено) · Жалоба Цикл вывода (Write Cycle 3, согласно даташиту): /WE и /OE фиксированны в low, устанавливается новый адрес, /CS устанавливается в low, и в течение 10нс необходимо, чтобы были выставлены данные, потом /CS устанавливается в high Не знаю как LPC2103, а вот LPC1768 переключает внешние ноги вполне быстро. Вполне получаются 10 нс импульсы на тактовой в 100 Мгц. А 10 нс это что ? Время между выполнением процессором инструкции загрузки в портовый регистр значения и переходом пина в новое состояние ? Кстати, я как то не задумывался, что из флеша код может выполняться медленнее, чем из оперативки... Изменено 29 апреля, 2010 пользователем artymen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lackertong 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 · Жалоба Если я правильно понял, Вы задачу формулируете так 1. есть сигнал СS, который управляет двумя конфликтующими микросхемами, одну активирует, вторую отключает. 2. одновременно с этим сигналам прямо в морду двум микросхемам выставляются данные 3. микросхемы меняются телами в течение 8.5 ns, пытаясь спалить друг друга. 4. памагите:) Вариант только один, использовать внешний шинник, который придержит данные на эти 8.5ns, но это нереально. Реально поставить резисторы, давят они друг друга, ну и пусть давят, снизить токи до приемлемого уровня. Да резисторы снизят крутизну фронтов, но сейчас безобразие еще хуже, и ничего, данные нормально бегают. Возможно все еще лучше станет работать. Какие там нагрузки емкостные, какая скорость обмена данными. Есть ли возможность поставить сопротивления. Еще вариант, две микросхемы давят друг друга потому что у них разные данные. А если перед сменой шины выставить на обоих одинаковые данные. Тогда давить не будут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
artymen 0 29 апреля, 2010 Опубликовано 29 апреля, 2010 (изменено) · Жалоба да, задача именно такая :) единственный вариант, который я вижу, это сделать задержку на прохождение /CS настолько, насколько задержится выставление данных + 10нс если ставить резисторы, то ведь это 8 штук... может проще все-таки задержку сделать ? есть же спец. схемы задержки ? а про одинаковые данные я уже думал, увы, это невозможно а, тьфу, че это я мучаюсь. все эти варианты циклов чтения и записи в даташите приведены лишь для того, чтобы показать какие тайминги надо выдерживать при смене управляющих сигналов ? правильно ли я понимаю, что фактически чтение/запись инициируется сменой адреса ? и вовсе необязательно дергать каждый раз /CS, /WE и /OE туда-сюда, а достаточно лишь зафиксировать их в соотвествующие режиму уровни ? Изменено 29 апреля, 2010 пользователем artymen Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться