реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Реализация SPI в AVR
vladimir_orl
сообщение Sep 25 2013, 13:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



Здравствуйте. Имеется SPI-slave устройство, которое я пытаюсь сэмулировать с помощью mega128. Единственное отличие между оригиналом и клоном, подключенными к SPI-мастеру - разница в уровнях на линии miso в паузах между посылками. В оригинале в паузах miso всегда выставляется в "1". А в AVR-овском SPI уровень MISO в паузе зависит от последнего бита. Отключать линию - тоже не вариант, т.к. надо быть постоянно "начеку". Т. к. мы не знаем когда начнётся следующая посылка. Режим передачи данных - третий. Кто-нибудь сталкивался с подобными вещами? Тема озвучена в ветке "AVR" а не в ветке "протоколы", т.к. насколько я понимаю это именно такая реализация в данном семействе МК.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 25 2013, 14:45
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



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


Классическая ошибка при имплементации I2C.
Проблема в том, что вы неправильно передаете высокий логический уровень. Его надо передавать не записывая единицу в соответствующий бит, а настраивая этот бит на вход. Тогда он станет высокоимпедансным и будет притянут резистором вверх. В вашем случае выход вашего слейва дает единицу, а мастера ноль и идет огромный ток. Это довольно опасная ситуация, хотя я не помню чтобы что-нибудь сгорело sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 25 2013, 14:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Tarbal @ Sep 25 2013, 18:45) *
Классическая ошибка при имплементации I2C.

Вообще-то в исходном сообщении три раза написано "SPI" sm.gif
Go to the top of the page
 
+Quote Post
_pv
сообщение Sep 25 2013, 15:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(vladimir_orl @ Sep 25 2013, 20:13) *
Здравствуйте. Имеется 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.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 25 2013, 15:35
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(aaarrr @ Sep 25 2013, 18:57) *
Вообще-то в исходном сообщении три раза написано "SPI" sm.gif


Простите мне мою невнимательность. Однако повышеный уровень нуля после последней единицы (или пониженный уровень единицы после последнего нуля) в посылке. все равно указывает на конфликт двух выходов. Полагаю, что чип селект может как-то влиять на состояние выхода MISO. Поищите в настройках.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Sep 25 2013, 18:23
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



если эта тема является продолжением предыдущих про нестандартный протокол по SPI, то там у мастера не было выхода чипселекта.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 25 2013, 21:17
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(ZASADA @ Sep 25 2013, 22:23) *
если эта тема является продолжением предыдущих про нестандартный протокол по SPI, то там у мастера не было выхода чипселекта.


Чип селект (слейв селект) сигнал обязателен в SPI
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Sep 26 2013, 04:21
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



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

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

С "прижиманием" линии clk тоже разобрался. Его действительно осуществляет slave для подтверждения того что всё хорошо. Без этого связка не работает.
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 26 2013, 04:34
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(vladimir_orl @ Sep 26 2013, 14:21) *
На slave чипселект после каждого байта включается-выключается самим slave-ом.

Этого не может быть. Или Вы реализуете совсем не SPI. Обмен данными всегда инициирует мастер, он же должен дергать и сигнал SS (входной сигнал для слейва).
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Sep 26 2013, 05:12
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



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


Это я так сделал. Потому как не мог ничего лучше придумать. И линии SS нет.
Go to the top of the page
 
+Quote Post
V_G
сообщение Sep 26 2013, 07:26
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Это вы неправильно сделали. Линия SS, если это SPI-интерфейс, обязана быть. Просто в AVR в режиме master вы обязаны ее дергать вручную и настроить как выход. В режиме Slave интерфейс узнает, что к нему обращаются, как раз при наличии сигнала SS, он должен быть настроен как вход.
При реализации slave-SPI на сдвиговом регистре (простейшая аппаратная реализация) сигнал SS, как правило, разрешает сдвиг.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Sep 26 2013, 08:15
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 738
Регистрация: 13-01-11
Из: Минск
Пользователь №: 62 210



прочитайте предыдущие темы топикстартера.
это не совсем SPI-интерфейс, точнее совсем не SPI-интерфейс. Это нестандартный трехпроводный интерфейс. Отличий от SPI куча:
отсутствует чипселект
выход CLK у мастера после передачи пакета становится входом и мастер ждет по нему подтверждение от слейва
вход CLK у слейва после приема пакета становится выходом и слейв дергает им, подтверждая правильность приема пакета
выход MISO у слейва после приема ставится в 1 (возможно Z-состояние, надо проверять )
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Sep 26 2013, 10:59
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



Да. Это нестандартный SPI. Но в том-то и дело что его надо на AVR mega сделать.
Вот сейчас натолкнулся в даташите на SAM4S (раздел про SPI):


Прикрепленное изображение





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

- MISO - * Not defined, but normally MSB of previous character received.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 26 2013, 13:02
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



"Осетрина бывает только первой свежести", а SPI только стандартным sm.gif
Нестандартный SPI называется как-то иначе, но не SPI.

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

Go to the top of the page
 
+Quote Post
__Alexander
сообщение Sep 30 2013, 14:54
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 18-07-07
Из: Киев
Пользователь №: 29 202



а почему это слэйв самостоятельно выставляет на линию miso лог "1" ? такого быть не может. это обычный сдвиговый регистр. если он работает на прием, то это прием.
CS на SPI не обязателен, точнее его можно жестко притянуть к земле, но если вылезет ошибка, то тогда да, не перезапустишь )
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th July 2025 - 22:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016