|
Реализация SPI в AVR |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 36)
|
Sep 25 2013, 14:45
|
Профессионал
    
Группа: Свой
Сообщений: 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. Проблема в том, что вы неправильно передаете высокий логический уровень. Его надо передавать не записывая единицу в соответствующий бит, а настраивая этот бит на вход. Тогда он станет высокоимпедансным и будет притянут резистором вверх. В вашем случае выход вашего слейва дает единицу, а мастера ноль и идет огромный ток. Это довольно опасная ситуация, хотя я не помню чтобы что-нибудь сгорело
|
|
|
|
|
Sep 25 2013, 15:01
|
Гуру
     
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Sep 26 2013, 05:12
|
Частый гость
 
Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591

|
Цитата На slave чипселект после каждого байта включается-выключается самим slave-ом. Это я так сделал. Потому как не мог ничего лучше придумать. И линии SS нет.
|
|
|
|
|
Sep 26 2013, 10:59
|
Частый гость
 
Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591

|
Да. Это нестандартный SPI. Но в том-то и дело что его надо на AVR mega сделать. Вот сейчас натолкнулся в даташите на SAM4S (раздел про SPI):
Наверное и в мегах то же. Буду дальше думать... - MISO - * Not defined, but normally MSB of previous character received.
|
|
|
|
|
Oct 1 2013, 22:57
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(ILYAUL @ Oct 1 2013, 23:15)  В большинстве случаев его просто сажают на землю Обычно с этого начинают писать драйвер SPI EEPROM. Потом, наевшись проблем, понимают наконец роль сингнала SS и начинают им управлять. Я же поднесу вам суть проблемы на блюдечке. Вот выдержка из описания микросхемы памяти AT25010A: A Write instruction requires the following sequence. After the CS line is pulled low to select the device, the WRITE op-code (including A8) is transmitted via the SI line fol- lowed by the byte address (A7 A0) and the data (D7 D0) to be programmed. Programming will start after the CS pin is brought high. The low-to-high transition of the CS pin must occur during the SCK low time immediately after clocking in the D0 (LSB) data bit. Если SS посадить на землю, то ничего не запишется. http://www.atmel.ca/Images/doc3348.pdf
Сообщение отредактировал Tarbal - Oct 1 2013, 23:06
|
|
|
|
|
Oct 3 2013, 16:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(ILYAUL @ Oct 2 2013, 21:57)  Протокол SPI допускает не использовать SS . И аргументировать сможете? Приведете документ, в котором об этом сказано? Я полагаю, что это ваше личное умозаключение, но вы можете переубедить меня, приведя ссылку на документ. Цитата(ILYAUL @ Oct 3 2013, 11:42)  Я посмотрел этот проект, чтобы себе напомнить как было решена сия задача. Единственное в чём погорячился , что SS был использован но не только как выбор всех чипов (PIC 22шт.) сразу , но и как сигнал окончания передачи. По сути SPI и сдвиговый регистр братья близнецы. И как любой сдвиговый регистр его можно наращивать . Поэтому в буфер мастера загоняются данные для всех 22 устройств . Первыми выходят данные для последнего устройства в цепочке. И кстати первыми приходят , если они Вам нужны. За 176 импульсов CLK все устройства получат свои данные и отдадут что накопили. Сигнал SS снимается , сообщая все устройствам сразу , что они получили свои данные. Вопрос стоит не как ухитриться сделать нестандартно, а следует ли вообще применять нестандартные решения.
|
|
|
|
|
Oct 3 2013, 16:14
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(Tarbal @ Oct 3 2013, 20:08)  И аргументировать сможете? Приведете документ, в котором об этом сказано? Я полагаю, что это ваше личное умозаключение, но вы можете переубедить меня, приведя ссылку на документ. Поищу Цитата(Tarbal @ Oct 3 2013, 20:08)  Вопрос стоит не как ухитриться сделать нестандартно, а следует ли вообще применять нестандартные решения. Что же здесь не стандартного , даже любимый Вами SS использован
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Oct 4 2013, 04:33
|
Местный
  
Группа: Участник
Сообщений: 227
Регистрация: 13-04-07
Пользователь №: 27 018

|
Цитата(ZASADA @ Oct 4 2013, 05:32)  просто в описании присутствует фраза типа daisy chain capable SPI Если я правильно помню - Daisy Chain - это когда вы от МК MOSI заводите в MOSI 1 слэйва, его MISO заводите в MOSI 2 второго соэйва ... MOSI слэйва n заводите в MISO МК...
|
|
|
|
|
Oct 4 2013, 08:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(ZASADA @ Oct 3 2013, 23:08)  ILYAUL, есть устройства, позволяющие вешать их паровозом на одну шину SPI, а есть не позволяющие... Какой нить примерчик Цитата Если я правильно помню - Daisy Chain - это когда вы от МК MOSI заводите в MOSI ..... Да
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|