Перейти к содержанию
    

Здравствуйте. Имеется SPI-slave устройство, которое я пытаюсь сэмулировать с помощью mega128. Единственное отличие между оригиналом и клоном, подключенными к SPI-мастеру - разница в уровнях на линии miso в паузах между посылками. В оригинале в паузах miso всегда выставляется в "1". А в AVR-овском SPI уровень MISO в паузе зависит от последнего бита. Отключать линию - тоже не вариант, т.к. надо быть постоянно "начеку". Т. к. мы не знаем когда начнётся следующая посылка. Режим передачи данных - третий. Кто-нибудь сталкивался с подобными вещами? Тема озвучена в ветке "AVR" а не в ветке "протоколы", т.к. насколько я понимаю это именно такая реализация в данном семействе МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Имеется SPI-slave устройство, которое я пытаюсь сэмулировать с помощью mega128. Единственное отличие между оригиналом и клоном, подключенными к SPI-мастеру - разница в уровнях на линии miso в паузах между посылками. В оригинале в паузах miso всегда выставляется в "1". А в AVR-овском SPI уровень MISO в паузе зависит от последнего бита. Отключать линию - тоже не вариант, т.к. надо быть постоянно "начеку". Т. к. мы не знаем когда начнётся следующая посылка. Режим передачи данных - третий. Кто-нибудь сталкивался с подобными вещами? Тема озвучена в ветке "AVR" а не в ветке "протоколы", т.к. насколько я понимаю это именно такая реализация в данном семействе МК.

 

Классическая ошибка при имплементации I2C.

Проблема в том, что вы неправильно передаете высокий логический уровень. Его надо передавать не записывая единицу в соответствующий бит, а настраивая этот бит на вход. Тогда он станет высокоимпедансным и будет притянут резистором вверх. В вашем случае выход вашего слейва дает единицу, а мастера ноль и идет огромный ток. Это довольно опасная ситуация, хотя я не помню чтобы что-нибудь сгорело :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Классическая ошибка при имплементации I2C.

Вообще-то в исходном сообщении три раза написано "SPI" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Имеется SPI-slave устройство, которое я пытаюсь сэмулировать с помощью mega128. Единственное отличие между оригиналом и клоном, подключенными к SPI-мастеру - разница в уровнях на линии miso в паузах между посылками. В оригинале в паузах miso всегда выставляется в "1". А в AVR-овском SPI уровень MISO в паузе зависит от последнего бита. Отключать линию - тоже не вариант, т.к. надо быть постоянно "начеку". Т. к. мы не знаем когда начнётся следующая посылка. Режим передачи данных - третий. Кто-нибудь сталкивался с подобными вещами? Тема озвучена в ветке "AVR" а не в ветке "протоколы", т.к. насколько я понимаю это именно такая реализация в данном семействе МК.

chipselect если отпустить, то avr тогда и mosi должен отпустить болтаться (автоматически будет переключаться на вход), ну и чтобы в "1" был - подтянуть к питанию.

в единицу переключать mosi после последнего клока и с активным чипселектом никто не обязан.

 

19.3 SS Pin Functionality

19.3.1 Slave Mode

When the SPI is configured as a Slave, the Slave Select (SS) pin is always input. When SS is held low, the SPI is

activated, and MISO becomes an output if configured so by the user. All other pins are inputs. When SS is driven

high, all pins are inputs, and the SPI is passive, which means that it will not receive incoming data. Note that the

SPI logic will be reset once the SS pin is driven high.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще-то в исходном сообщении три раза написано "SPI" :)

 

Простите мне мою невнимательность. Однако повышеный уровень нуля после последней единицы (или пониженный уровень единицы после последнего нуля) в посылке. все равно указывает на конфликт двух выходов. Полагаю, что чип селект может как-то влиять на состояние выхода MISO. Поищите в настройках.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если эта тема является продолжением предыдущих про нестандартный протокол по SPI, то там у мастера не было выхода чипселекта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если эта тема является продолжением предыдущих про нестандартный протокол по SPI, то там у мастера не было выхода чипселекта.

 

Чип селект (слейв селект) сигнал обязателен в SPI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, действительно. На шине master-slave всего три линии: miso, mosi, clk. На slave чипселект после каждого байта включается-выключается самим slave-ом. Честно говоря, сам удивляюсь, почему всё работает без внешнего чипселекта. И биты на сбиваются.

 

Наверное надо действительно надо делать SPI переключением выводов на вход или выход (то есть изменением их сопротивления). У меня сейчас внешняя подтяжка 1k резисторами к +5В. Тока действительно много потребляется. Надо будет транзисторы на вход поставить.

 

С "прижиманием" линии clk тоже разобрался. Его действительно осуществляет slave для подтверждения того что всё хорошо. Без этого связка не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На slave чипселект после каждого байта включается-выключается самим slave-ом.

Этого не может быть. Или Вы реализуете совсем не SPI. Обмен данными всегда инициирует мастер, он же должен дергать и сигнал SS (входной сигнал для слейва).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На slave чипселект после каждого байта включается-выключается самим slave-ом.

 

Это я так сделал. Потому как не мог ничего лучше придумать. И линии SS нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это вы неправильно сделали. Линия SS, если это SPI-интерфейс, обязана быть. Просто в AVR в режиме master вы обязаны ее дергать вручную и настроить как выход. В режиме Slave интерфейс узнает, что к нему обращаются, как раз при наличии сигнала SS, он должен быть настроен как вход.

При реализации slave-SPI на сдвиговом регистре (простейшая аппаратная реализация) сигнал SS, как правило, разрешает сдвиг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прочитайте предыдущие темы топикстартера.

это не совсем SPI-интерфейс, точнее совсем не SPI-интерфейс. Это нестандартный трехпроводный интерфейс. Отличий от SPI куча:

отсутствует чипселект

выход CLK у мастера после передачи пакета становится входом и мастер ждет по нему подтверждение от слейва

вход CLK у слейва после приема пакета становится выходом и слейв дергает им, подтверждая правильность приема пакета

выход MISO у слейва после приема ставится в 1 (возможно Z-состояние, надо проверять )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да. Это нестандартный SPI. Но в том-то и дело что его надо на AVR mega сделать.

Вот сейчас натолкнулся в даташите на SAM4S (раздел про SPI):

 

 

post-73591-1380192938_thumb.jpg

 

 

 

 

Наверное и в мегах то же. Буду дальше думать...

 

- MISO - * Not defined, but normally MSB of previous character received.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Осетрина бывает только первой свежести", а SPI только стандартным :)

Нестандартный SPI называется как-то иначе, но не SPI.

 

Я бы почитал документацию и поискал где сигнал SS. Дело в том, что по завершению этого сигнала интерфейс SPI совершает действия и не быть его не может. Если например вы в ЕЕПРОМ с SPI интерфейсом не будете опускать и поднимать SS (допустим разрешите навсегда), то вы ничего не запишете в мамять.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а почему это слэйв самостоятельно выставляет на линию miso лог "1" ? такого быть не может. это обычный сдвиговый регистр. если он работает на прием, то это прием.

CS на SPI не обязателен, точнее его можно жестко притянуть к земле, но если вылезет ошибка, то тогда да, не перезапустишь )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...