|
Реализовать мультипроцессорный доступ к SPI DATA FLASH, -- |
|
|
|
Apr 6 2006, 17:51
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Самое простое схемотехнически, процессор, прежде чем выставить CS, анализирует уровень, на ней, если оба хотят, вступает в действие система разруливания коллизий. Сложнее - завести перекрестные линии сигнализирующие о занятости памяти. Т.е. в общем виде аппаратный мьютекс.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Apr 6 2006, 20:02
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(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 вполне спасают отца русской демократии от придуманной им проблемы. Ферштейн?  P.S. забыл еще про адресацию входов написать. Если вдруг сами не додумаетесь, то заведите один из CSов на адресный вход S указанного мультиплексора. Соответственно для этого МК сигналы нужно завести на те входы муксера, которые выбираются при низком уровне на входе S. Никакого высокого приоритета для этого МК такая схема адресации сигналов не дает. Догадались почему?
|
|
|
|
|
Apr 6 2006, 20:59
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(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. Хотя, конечно же, я ничего не навязываю и выбор способа за вопрошающим.
|
|
|
|
|
Apr 7 2006, 06:01
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Такой вариантец могу предложить: Соединить две пары одноименных пин процов между собой перекресно, напр PD5, PD2 -> PD2, PD5. Перед обращением к датафлешу смотреть уровень на входном пине, если 0 - низя, 1 - можно. Перед обращением к датафлешу устанавливать на выходном пине 0 (мол занят ресурс), после прочтения - устанавливать 1. Был бы C51 было б проще, там одним пином можно обойтись. Цитата ещё больное место это установить (освобождать) линии в зет состояние.. как бы так бы изголиться.... Тупо. Соединить линии обращения к датафлешу с обоих МК. Перед обращением к датафлешу активировать выход DDRX = 11, после окончания работы - отключать DDRX = 00. И уже после того как пины от шины датафлеша отрублены - сигнализировать сопроцессору, что линия свободна.
|
|
|
|
|
Apr 7 2006, 06:23
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(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. И уже после того как пины от шины датафлеша отрублены - сигнализировать сопроцессору, что линия свободна. Угу. меня этот вариант тоже сразу начал крутиться в голове... но может мультиплексирование всетаки правильней? надо подумать....
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Apr 7 2006, 11:23
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Kovrov @ Apr 7 2006, 12:23)  скорее всего CLK на SPI будет работать больше чем 10 мгц пояснение... первый мк будет по наличии аварии весь архив данных записывать в датафлеш процесс не спешный.. и проблем не вызывает потом все это хозяйство из флешки должен забрать второй мк что за мк будет и какая скорость не известно поэтому на 50 мгц должен быть запас - от греха подальше... Я конечно много не знаю, но где вы нашли DataFlash AT45DB161(с каким-нибудь суффиксом), работающую с частотой тактирования 50МГц? Это во-первых. А во-вторых, поскольку тема размещена в разделе AVR, то я логично предположил, что один из МК тоже AVR. Я не очень хорошо знаю все AVR, но растолкуйте который из них сможет выгребать с конвейера SPI данные чаще чем 2-3 миллиона раз в секунду? Или для этого процесса DMA используется? Я в принципе тоже сторонник, что "лучше переспать, чем недоесть", однако от ваших запросов вы не слишком рискуете "лопнуть" ?
|
|
|
|
|
Apr 7 2006, 15:13
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Kovrov @ Apr 7 2006, 18:31)  один из процессоров имеено тот который будет выполнять ф-ию записи в датафлеш ну вот прям 100% даже тысячу что будет мега 128!! работа скорее всего на 4 мгц клока Ну дык а я о чем!  Цитата(Kovrov @ Apr 7 2006, 18:31)  второй процессор я не знаю какой будет и знать не хочу... может там DSP будет или что из рода MSP 430!! это уже не мое дело, главное чтоб я мог дать безпрепятственный доступ к флешке какая у них скорость будет неизвестно... Задача со многими неизвестными может иметь одно решение, может несколько, а может не иметь ни одного. Любопытно вы решаете задачу, не зная полностью начальные условия. Цитата(Kovrov @ Apr 7 2006, 18:31)  а флешка AT45DB161D до 66 МГЦ SPI... Угу. Увидел. Новую версию Atmel выпустил.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|