Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реализовать мультипроцессорный доступ к SPI DATA FLASH
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Kovrov
Задача такая организовать 2х процессорный доступ к AT45DB161 по SPI
синхронность не нужна...
пусть работаеют друг за другом
как лучше всего сделать?
beer_warrior
Самое простое схемотехнически, процессор, прежде чем выставить CS,
анализирует уровень, на ней, если оба хотят, вступает в действие система
разруливания коллизий. Сложнее - завести перекрестные линии сигнализирующие о занятости памяти.
Т.е. в общем виде аппаратный мьютекс.
rezident
Я бы для исключения аппаратных коллизий все-таки предложил мультиплексирование. По принципу "кто первый встал, того и тапки" smile.gif
Kovrov
я тоже нехочу варианта когда оба хотят!!
думаю сделать пару доп пинов занят - хочу :-)
ещё больное место это установить (освобождать) линии в зет состояние..
как бы так бы изголиться....
так навскидку беспокоит сигнал CS + ещё согласование 5- 3 вольта
ну это ладно буфер НСТ серии поможет наверное....
beer_warrior
Цитата
так навскидку беспокоит сигнал CS + ещё согласование 5- 3 вольта
ну это ладно буфер НСТ серии поможет наверное....

Ну так и карты в руки - на 7402 сделать и преобразование уровней и арбитраж.
rezident
Цитата(Kovrov @ Apr 7 2006, 00:33) *
ещё больное место это установить (освобождать) линии в зет состояние..
как бы так бы изголиться....

Дык я же предложил вам муксер (мультиплексор) поставить. Но только не серии HCT! Типа 74HC257. Сигналы CS, SCK, DI от каждого МК завести на свою группу входов муксера. Арбитраж сделать на XORе типа 74HC86. Завести на входы XOR по CSу от каждого МК, на втором элементе 74HC86 проинвертировать и дальше на вход OE муксера. Состояние входа ОЕ должны проверять каждый из МК. Если МК CS сбросил, а вход OE остался в лог. 1, то значит произошел конфликт доступа. При этом выходы мультиплексора перейдут (или останутся) в высокоимпедансное состояние. А если будет наличествовать pull-up на его выходах, то для DataFlash это будет обычное НЕактивное состояние. Мультиплексор можно запитать от 3.3В и сразу же получить согласование уровней с входами DataFlash. Если хочется ВЫходные уровени схемы "арбитража и согласования" иметь TTL, то никто не мешает использовать свободный элемент 74HC86 в качестве повторителя, запитав ее от 5В. Согласовение же по входам мультиплексора легко делается с помощью последовательного включения резисторов. Например, для 74AC257 (ИМХО более предпочтительный муксер в данном случае, чем HC257) входная емкость не более 10pF, а макс. ток защитного диода 20мА. Так что резисторы, скажем 330 Ом, вообще нисколько не повлияют на работоспособность SPI до частоты этак в 10МГц. Не думаю, что ваш МК будет работать с DataFlash на более высокой частоте тактирования SPI.
Итого подытожим. Два корпуса м/с малой степени интеграции 74AC257 и 74AC(HC)86 вполне спасают отца русской демократии от придуманной им проблемы. Ферштейн? wink.gif
P.S. забыл еще про адресацию входов написать. Если вдруг сами не додумаетесь, то заведите один из CSов на адресный вход S указанного мультиплексора. Соответственно для этого МК сигналы нужно завести на те входы муксера, которые выбираются при низком уровне на входе S. Никакого высокого приоритета для этого МК такая схема адресации сигналов не дает. Догадались почему?
beer_warrior
А нафига все сигналы заводить на мукс?
Достаточно переключать CSы. Ну и два буфера для согласования DI 3->5.
rezident
Цитата(beer_warrior @ Apr 7 2006, 02:15) *
А нафига все сигналы заводить на мукс?

Не все, а только те, которые являются входными для DataFlash. Для согласования уровней.
Цитата(beer_warrior @ Apr 7 2006, 02:15) *
Достаточно переключать CSы. Ну и два буфера для согласования DI 3->5.

Если только переключать CSы, то остальные выходы SPI каждого МК нужно держать в Z-состоянии и при обращении к DataFlash перепрограммировать их на вывод и/или на функцию интерфейса SPI. Это немного напрягает при программировании. Что уже подметили.
Цитата
ещё больное место это установить (освобождать) линии в зет состояние..
как бы так бы изголиться....

Да и не устраняет полностью ваш способ вероятность аппаратного конфликта.
Предложенная мной схема позволяет подключить к SPI шине каждого МК еще и другие устройства, если это необходимо. Причем работа каждого МК с этими дополнительными устройствами никак не будет влиять ни на работу соседнего МК, ни на работу любого из МК с аппаратно расшаренной DataFlash.
Хотя, конечно же, я ничего не навязываю и выбор способа за вопрошающим.
Kovrov
спасибо всем откликнувшимся щя буду вникать че куды и как
defunct
Такой вариантец могу предложить:
Соединить две пары одноименных пин процов между собой перекресно, напр PD5, PD2 -> PD2, PD5. Перед обращением к датафлешу смотреть уровень на входном пине, если 0 - низя, 1 - можно. Перед обращением к датафлешу устанавливать на выходном пине 0 (мол занят ресурс), после прочтения - устанавливать 1. Был бы C51 было б проще, там одним пином можно обойтись.

Цитата
ещё больное место это установить (освобождать) линии в зет состояние..
как бы так бы изголиться....

Тупо. Соединить линии обращения к датафлешу с обоих МК. Перед обращением к датафлешу активировать выход DDRX = 11, после окончания работы - отключать DDRX = 00. И уже после того как пины от шины датафлеша отрублены - сигнализировать сопроцессору, что линия свободна.
Kovrov
Цитата(rezident @ Apr 7 2006, 00:02) *
. Так что резисторы, скажем 330 Ом, вообще нисколько не повлияют на работоспособность SPI до частоты этак в 10МГц. Не думаю, что ваш МК будет работать с DataFlash на более высокой частоте тактирования SPI.

скорее всего CLK на SPI будет работать больше чем 10 мгц
пояснение...
первый мк будет по наличии аварии весь архив данных записывать в датафлеш
процесс не спешный.. и проблем не вызывает
потом все это хозяйство из флешки должен забрать второй мк
что за мк будет и какая скорость не известно
поэтому на 50 мгц должен быть запас - от греха подальше...
чначала велось к тому что чтоб все это передавалось по уарту по рс485
но протокол так и не был утвержден сторонами..
поэтому мня посетила мысль от мультипроцессорном доступе

Цитата(defunct @ Apr 7 2006, 10:01) *
Такой вариантец могу предложить:
Тупо. Соединить линии обращения к датафлешу с обоих МК. Перед обращением к датафлешу активировать выход DDRX = 11, после окончания работы - отключать DDRX = 00. И уже после того как пины от шины датафлеша отрублены - сигнализировать сопроцессору, что линия свободна.


Угу. меня этот вариант тоже сразу начал крутиться в голове...
но может мультиплексирование всетаки правильней?
надо подумать....
defunct
Цитата(Kovrov @ Apr 7 2006, 09:23) *
Угу. меня этот вариант тоже сразу начал крутиться в голове...
но может мультиплексирование всетаки правильней?
надо подумать....

Однозначно правильного пути не бывает ;>
Я же не зря предложил PD2 (это ExtInt0) т.е. получив от сопроцессора инфу по Int(у) проц просто отложит себе где-то в памяти, что интерфейс свободен или занят и будет себе работать дальше.
rezident
Цитата(Kovrov @ Apr 7 2006, 12:23) *
скорее всего CLK на SPI будет работать больше чем 10 мгц
пояснение...
первый мк будет по наличии аварии весь архив данных записывать в датафлеш
процесс не спешный.. и проблем не вызывает
потом все это хозяйство из флешки должен забрать второй мк
что за мк будет и какая скорость не известно
поэтому на 50 мгц должен быть запас - от греха подальше...

Я конечно много не знаю, но где вы нашли DataFlash AT45DB161(с каким-нибудь суффиксом), работающую с частотой тактирования 50МГц? Это во-первых. А во-вторых, поскольку тема размещена в разделе AVR, то я логично предположил, что один из МК тоже AVR. Я не очень хорошо знаю все AVR, но растолкуйте который из них сможет выгребать с конвейера SPI данные чаще чем 2-3 миллиона раз в секунду? Или для этого процесса DMA используется?
Я в принципе тоже сторонник, что "лучше переспать, чем недоесть", однако от ваших запросов вы не слишком рискуете "лопнуть" ? wink.gif
Kovrov
один из процессоров имеено тот который будет выполнять ф-ию записи в датафлеш
ну вот прям 100% даже тысячу что будет мега 128!! работа скорее всего на 4 мгц клока
второй процессор я не знаю какой будет и знать не хочу... может там DSP будет или что из рода MSP 430!!
это уже не мое дело, главное чтоб я мог дать безпрепятственный доступ к флешке
какая у них скорость будет неизвестно...
ещё одно флеш память в 99% будет бездействовать - запись будет только если случилась авария
что надеюсь не случиться
а флешка AT45DB161D до 66 МГЦ SPI...
rezident
Цитата(Kovrov @ Apr 7 2006, 18:31) *
один из процессоров имеено тот который будет выполнять ф-ию записи в датафлеш
ну вот прям 100% даже тысячу что будет мега 128!! работа скорее всего на 4 мгц клока

Ну дык а я о чем! smile.gif
Цитата(Kovrov @ Apr 7 2006, 18:31) *
второй процессор я не знаю какой будет и знать не хочу... может там DSP будет или что из рода MSP 430!!
это уже не мое дело, главное чтоб я мог дать безпрепятственный доступ к флешке
какая у них скорость будет неизвестно...

Задача со многими неизвестными может иметь одно решение, может несколько, а может не иметь ни одного. Любопытно вы решаете задачу, не зная полностью начальные условия. cranky.gif
Цитата(Kovrov @ Apr 7 2006, 18:31) *
а флешка AT45DB161D до 66 МГЦ SPI...

Угу. Увидел. Новую версию Atmel выпустил.
Kovrov
Цитата(rezident @ Apr 7 2006, 19:13) *
Задача со многими неизвестными может иметь одно решение, может несколько, а может не иметь ни одного. Любопытно вы решаете задачу, не зная полностью начальные условия. cranky.gif


по моему известно все!!
есть даташит на 45-161...
и единственная задача придерживаться его...
железная логика?
ну а если с другой стороны.. если все известно - это совсем неинтересно..
и на кой тогда исскуство програмирования, если только учитывать что известно???????? :-)))
rezident
Гм. Вот вам предложат накормить в ресторане какого-то гостя так, чтобы он остался доволен. Укажут ресторан, заказанный столик, дадут денег, но не скажут, что за гость, откуда. Понятно, что по законам гостеприимства вы не будете сидеть за столиком и смотреть ему в рот, а что-либо закажете для себя. Хотя бы салат и минералку wink.gif Про себя вы все знаете, а что предпочитает кушать гость - нет. Ну и как вы будете решать такую задачу? Предположите, что гость это тоже человек и поэтому все что есть в ресторане съедобного для вас будет съедобно и для гостя?
Ну да ладно. Это уже другая философия. Бог вам в помощь. Удачи в разработках! cheers.gif
Kovrov
нет я просто предложу ему меню!!!!
;----------
и вам спасибо за подборку м/с мукса..
единственное что добавил это в MISO - 74act125 ,благо она уже учавствует в схеме :-)
rezident
Я уж и не стал на выходные данные 125-ю предлагать, т.к. думал что не ко двору пришлось мое предложение с муксером smile.gif Пожалуйста, конечно!
Kovrov
как так не ко двору - так и сделал!!!
Ledol
Если речь идет о 2-х процессорной схеме то можно один контроллер назначить на SPI мастером, второй - слейвом (ч-з вывод SS). Мастер, перед работой садит SS в GND, т.е. отключает слейв от шины(c.166 Datasheet ATMega128). Работает с флеш. Устанавливает SS в VCC (разрешает слейву работу с флеш). Есс-но в этот момент "слейв" на шине SPI будет мастером. Проблема программно обеспечить "слейву" безошибочную работу при перебивании его Мастером.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.