vladimir_orl 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба Здравствуйте. Имеется SPI-slave устройство, которое я пытаюсь сэмулировать с помощью mega128. Единственное отличие между оригиналом и клоном, подключенными к SPI-мастеру - разница в уровнях на линии miso в паузах между посылками. В оригинале в паузах miso всегда выставляется в "1". А в AVR-овском SPI уровень MISO в паузе зависит от последнего бита. Отключать линию - тоже не вариант, т.к. надо быть постоянно "начеку". Т. к. мы не знаем когда начнётся следующая посылка. Режим передачи данных - третий. Кто-нибудь сталкивался с подобными вещами? Тема озвучена в ветке "AVR" а не в ветке "протоколы", т.к. насколько я понимаю это именно такая реализация в данном семействе МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба Здравствуйте. Имеется SPI-slave устройство, которое я пытаюсь сэмулировать с помощью mega128. Единственное отличие между оригиналом и клоном, подключенными к SPI-мастеру - разница в уровнях на линии miso в паузах между посылками. В оригинале в паузах miso всегда выставляется в "1". А в AVR-овском SPI уровень MISO в паузе зависит от последнего бита. Отключать линию - тоже не вариант, т.к. надо быть постоянно "начеку". Т. к. мы не знаем когда начнётся следующая посылка. Режим передачи данных - третий. Кто-нибудь сталкивался с подобными вещами? Тема озвучена в ветке "AVR" а не в ветке "протоколы", т.к. насколько я понимаю это именно такая реализация в данном семействе МК. Классическая ошибка при имплементации I2C. Проблема в том, что вы неправильно передаете высокий логический уровень. Его надо передавать не записывая единицу в соответствующий бит, а настраивая этот бит на вход. Тогда он станет высокоимпедансным и будет притянут резистором вверх. В вашем случае выход вашего слейва дает единицу, а мастера ноль и идет огромный ток. Это довольно опасная ситуация, хотя я не помню чтобы что-нибудь сгорело :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба Классическая ошибка при имплементации I2C. Вообще-то в исходном сообщении три раза написано "SPI" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 53 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба Здравствуйте. Имеется 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба Вообще-то в исходном сообщении три раза написано "SPI" :) Простите мне мою невнимательность. Однако повышеный уровень нуля после последней единицы (или пониженный уровень единицы после последнего нуля) в посылке. все равно указывает на конфликт двух выходов. Полагаю, что чип селект может как-то влиять на состояние выхода MISO. Поищите в настройках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZASADA 0 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба если эта тема является продолжением предыдущих про нестандартный протокол по SPI, то там у мастера не было выхода чипселекта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 25 сентября, 2013 Опубликовано 25 сентября, 2013 · Жалоба если эта тема является продолжением предыдущих про нестандартный протокол по SPI, то там у мастера не было выхода чипселекта. Чип селект (слейв селект) сигнал обязателен в SPI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба Да, действительно. На шине master-slave всего три линии: miso, mosi, clk. На slave чипселект после каждого байта включается-выключается самим slave-ом. Честно говоря, сам удивляюсь, почему всё работает без внешнего чипселекта. И биты на сбиваются. Наверное надо действительно надо делать SPI переключением выводов на вход или выход (то есть изменением их сопротивления). У меня сейчас внешняя подтяжка 1k резисторами к +5В. Тока действительно много потребляется. Надо будет транзисторы на вход поставить. С "прижиманием" линии clk тоже разобрался. Его действительно осуществляет slave для подтверждения того что всё хорошо. Без этого связка не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба На slave чипселект после каждого байта включается-выключается самим slave-ом. Этого не может быть. Или Вы реализуете совсем не SPI. Обмен данными всегда инициирует мастер, он же должен дергать и сигнал SS (входной сигнал для слейва). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба На slave чипселект после каждого байта включается-выключается самим slave-ом. Это я так сделал. Потому как не мог ничего лучше придумать. И линии SS нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 7 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба Это вы неправильно сделали. Линия SS, если это SPI-интерфейс, обязана быть. Просто в AVR в режиме master вы обязаны ее дергать вручную и настроить как выход. В режиме Slave интерфейс узнает, что к нему обращаются, как раз при наличии сигнала SS, он должен быть настроен как вход. При реализации slave-SPI на сдвиговом регистре (простейшая аппаратная реализация) сигнал SS, как правило, разрешает сдвиг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZASADA 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба прочитайте предыдущие темы топикстартера. это не совсем SPI-интерфейс, точнее совсем не SPI-интерфейс. Это нестандартный трехпроводный интерфейс. Отличий от SPI куча: отсутствует чипселект выход CLK у мастера после передачи пакета становится входом и мастер ждет по нему подтверждение от слейва вход CLK у слейва после приема пакета становится выходом и слейв дергает им, подтверждая правильность приема пакета выход MISO у слейва после приема ставится в 1 (возможно Z-состояние, надо проверять ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vladimir_orl 0 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба Да. Это нестандартный SPI. Но в том-то и дело что его надо на AVR mega сделать. Вот сейчас натолкнулся в даташите на SAM4S (раздел про SPI): Наверное и в мегах то же. Буду дальше думать... - MISO - * Not defined, but normally MSB of previous character received. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 4 26 сентября, 2013 Опубликовано 26 сентября, 2013 · Жалоба "Осетрина бывает только первой свежести", а SPI только стандартным :) Нестандартный SPI называется как-то иначе, но не SPI. Я бы почитал документацию и поискал где сигнал SS. Дело в том, что по завершению этого сигнала интерфейс SPI совершает действия и не быть его не может. Если например вы в ЕЕПРОМ с SPI интерфейсом не будете опускать и поднимать SS (допустим разрешите навсегда), то вы ничего не запишете в мамять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
__Alexander 0 30 сентября, 2013 Опубликовано 30 сентября, 2013 · Жалоба а почему это слэйв самостоятельно выставляет на линию miso лог "1" ? такого быть не может. это обычный сдвиговый регистр. если он работает на прием, то это прием. CS на SPI не обязателен, точнее его можно жестко притянуть к земле, но если вылезет ошибка, то тогда да, не перезапустишь ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться