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

Контроллер для 24-битного SPI

По работе затеяли работать с микросхемой, имеющей интерфейс SPI. По даташиту длинна посылки должна составлять 24 бита.

Ранее имел дело (баловался, ага) с AVR-ми, но они по большей части 8-ми битные и чтобы передать 24 бита нужно будет сделать 3 посылки по 8 бит. Насколько мне известно так делают многие и это вроде бы правильно. Придется заморочиться с массивами, указателями, прерываниями и пр.

А если взять 32-битный Cortex (с ними тоже баловался), то с ним не будет проще? Видел где-то в даташитах на кортексы, что можно задать длину посылки на 8 и 16 бит, а 24 как-то не встречал.

И еще вопрос. Точнее просьба. Посоветуйте какой тогда приобрести отладочный комплект, чтобы без особых ухищрений написать программу и зашить прошивку в МК.

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


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

Оставьте AVR, если с ним знакомы. В 99% случаев разрядность сдвигового регистра SPI принципиального значения не имеет.

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


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

Оставьте AVR, если с ним знакомы. В 99% случаев разрядность сдвигового регистра SPI принципиального значения не имеет.

Спасибо. Согласен, что старый друг лучше новых двух. Постою послушаю, может кто еще интересного расскажет.

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


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

А если взять 32-битный Cortex (с ними тоже баловался), то с ним не будет проще? Видел где-то в даташитах на кортексы, что можно задать длину посылки на 8 и 16 бит, а 24 как-то не встречал.

 

В доках на LPC17 указана длина посылки от 8 до 16бит, в KINETIS MKL15 только 8 бит, в STM32F10x 8 или 16 бит. Лично я в проектах всегда использую только 8битные посылки, даже если процессор подерживает возможность передавать требуемое мне кол-во бит. Так проще сопровождать проект и переводить при необходимости с одного процессора на другой. Кстати SPI очень легко реализуется простым ногодрыганием (програмный SPI). И если Вам принципиально получить 24 бита, то можно релизовать его именно так.

 

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


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

У Renesas RX210 длина посылки SPI может быть 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 24, or 32 bit. Причем переключение может происходить во время передачи без "разрывов" (аппаратный чипселект SPI не дергается).

 

Может кто еще напишет про особенности SPI в других микроконтроллерах, интересно где как реализуют.

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


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

В доках на LPC17 указана длина посылки от 8 до 16бит, в KINETIS MKL15 только 8 бит, в STM32F10x 8 или 16 бит. Лично я в проектах всегда использую только 8битные посылки, даже если процессор подерживает возможность передавать требуемое мне кол-во бит. Так проще сопровождать проект и переводить при необходимости с одного процессора на другой. Кстати SPI очень легко реализуется простым ногодрыганием (програмный SPI). И если Вам принципиально получить 24 бита, то можно релизовать его именно так.

Ага, ну ногодрыганием - это понятно. Медленней, нежели аппаратно, зато полный контроль. Не особо принципиально получить 24-битную посылку разом. Мне казалось, что если сразу заполнять слово, то меньше вероятность накосячить.

 

У RX210 длина посылки SPI может быть 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 24, or 32 bit. Причем переключение может происходить во время передачи без "разрывов" (аппаратный чипселект SPI не дергается).

 

Может кто еще напишет про особенности SPI в других микроконтроллерах, интересно где как реализуют.

Верно, мне тоже интересно неужто все 8-битным SPI работают?

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


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

Верно, мне тоже интересно неужто все 8-битным SPI работают?

Там где скорость не критична достаточно 8 битного.

Когда по скорости и таймингам нужно выжать максимум (например, при развертке VGA картинки)

требуется выставлять максимально возможную длину SPI-слова, чтобы минимизировать число DMA-транзакций,

т.к. между DMA-запросом и DMA-транзакцией может быть более 12 тактов (для Cortex-M).

При 16-битном SPI-слове и буфере, передаваемом через DMA, нет промежутков между словами даже на FSCK = FCPU / 2.

Если использовать 8-битные слова, то между посылками есть паузы. В большинстве задач эти паузы не критичны.

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


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

Угу, звучит логично. А что посоветуете в качестве программатора/отладчика и отладочной платы?

 

Для STM присмотрел STlink и дискавери (хватит или не?). Или есть альтернативы получше?

А для AVR - AVRDragon или это ни к чему? Фирма платит, но платит 1 раз. Не хотелось бы нарваться на г. Буду брать что-то одно ессно.

Изменено пользователем Herz
Избыточное цитирование

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


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

А что посоветуете в качестве программатора/отладчика и отладочной платы?

Для STM32 лучшая на мой взгляд отладка: STM32F4DISCOVERY.

Хотя многое зависит от решаемых задач.

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


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

Может кто еще напишет про особенности SPI в других микроконтроллерах, интересно где как реализуют.

На OMAP-L137, насколько помню, через старшую часть записываемого слова можно управлять чип-селектами (причём там их может быть несколько на одном порту) во время передачи блока данных.

 

Верно, мне тоже интересно неужто все 8-битным SPI работают?

Нет. Каждый раз выбираем, то что удобнее в данном случае. Но чем длиннее слово -> тем меньше пересылок -> меньше загрузка шины МК. Также очень помогает наличие FIFO в SPI-контроллере.

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


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

:bb-offtopic:

а у кого есть нестандартная, не кратная 8 бит, настройки SPI?

очень хотелось бы 17 бит

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


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

а у кого есть нестандартная, не кратная 8 бит, настройки SPI?

очень хотелось бы 17 бит

 

Lpc17? Писал выше что если верить докам то он может иметь от 8 до 16 бит.

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


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

:bb-offtopic:

а у кого есть нестандартная, не кратная 8 бит, настройки SPI?

У stm32f030 есть SPI с шириной от 4 до 16 бит, но т.к. 17 - простое число... это мало чем поможет.

Пожалуй, самым простым решением будет - ногодрыг.

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


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

Lpc17? Писал выше что если верить докам то он может иметь от 8 до 16 бит.

Плохо читаете доки LPC17x: 4...16 бит.

LPC5410x судя по докам (не работал с ними): 1...16 бит.

 

очень хотелось бы 17 бит

опять-же - я не работал, но судя по докам - Nuvoton NUC970 SPI: Variable length of transfer word up to 32 bits

Так что - ищите да обрящете!

 

У stm32f030 есть SPI с шириной от 4 до 16 бит, но т.к. 17 - простое число... это мало чем поможет.

Пожалуй, самым простым решением будет - ногодрыг.

Самым простым решением будет выставить размер 9 бит - передать старшие 9 бит, дождаться опустошения сдвигового регистра, выставить размер 8 бит, передать оставшиеся 8 бит.

Прибегать к ногодрыгу при наличии аппаратного SPI - стОит в очень-очень редких специфичных случаях. А скорей всего - это признак низкой квалификации разработчика, так как это типичный путь всех чайников.

 

И непонятно, что за задача такая хитрая, где надо передавать по 17 бит?? Скорей всего, у автора, в архитектуре решения в целом что-то сделано неправильно.

 

PS: А вообще - самый крутой SPI-контроллер который я использовал - у OMAP-L137. На нём можете сделать пересылку двух слов 9+8 бит просто двумя записями в регистр данных: его SPI-контроллер позволяет предварительно запрограммировать 4-ре режима передачи и выбирать нужный режим старшими битами записываемого в регистр данных слова. Так что на нём нетрудно строить пересылки сплошных пакетов данных из слов разной длины без всяких ногодрыгов и перепрограммирований в процессе передачи.

 

PSS: Также есть LPC43xx с его SGPIO, на котором можно построить почти любой последовательный интерфейс (и SPI в том числе) с длинами слов 1..32 бита (да можно и больше 32бит конкатенацией нескольких регистров слайсов последовательно). Опять-же - без ногодрыга и перепрограммирований режима в процессе передачи пакета слов.

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


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

Самым простым решением будет выставить размер 9 бит - передать старшие 9 бит, дождаться опустошения сдвигового регистра, выставить размер 8 бит, передать оставшиеся 8 бит.

А в чем это принципиально отличается от ногодрыга?

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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