logelectronix 0 17 апреля, 2016 Опубликовано 17 апреля, 2016 · Жалоба По работе затеяли работать с микросхемой, имеющей интерфейс SPI. По даташиту длинна посылки должна составлять 24 бита. Ранее имел дело (баловался, ага) с AVR-ми, но они по большей части 8-ми битные и чтобы передать 24 бита нужно будет сделать 3 посылки по 8 бит. Насколько мне известно так делают многие и это вроде бы правильно. Придется заморочиться с массивами, указателями, прерываниями и пр. А если взять 32-битный Cortex (с ними тоже баловался), то с ним не будет проще? Видел где-то в даташитах на кортексы, что можно задать длину посылки на 8 и 16 бит, а 24 как-то не встречал. И еще вопрос. Точнее просьба. Посоветуйте какой тогда приобрести отладочный комплект, чтобы без особых ухищрений написать программу и зашить прошивку в МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 17 апреля, 2016 Опубликовано 17 апреля, 2016 · Жалоба Оставьте AVR, если с ним знакомы. В 99% случаев разрядность сдвигового регистра SPI принципиального значения не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
logelectronix 0 17 апреля, 2016 Опубликовано 17 апреля, 2016 · Жалоба Оставьте AVR, если с ним знакомы. В 99% случаев разрядность сдвигового регистра SPI принципиального значения не имеет. Спасибо. Согласен, что старый друг лучше новых двух. Постою послушаю, может кто еще интересного расскажет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба А если взять 32-битный Cortex (с ними тоже баловался), то с ним не будет проще? Видел где-то в даташитах на кортексы, что можно задать длину посылки на 8 и 16 бит, а 24 как-то не встречал. В доках на LPC17 указана длина посылки от 8 до 16бит, в KINETIS MKL15 только 8 бит, в STM32F10x 8 или 16 бит. Лично я в проектах всегда использую только 8битные посылки, даже если процессор подерживает возможность передавать требуемое мне кол-во бит. Так проще сопровождать проект и переводить при необходимости с одного процессора на другой. Кстати SPI очень легко реализуется простым ногодрыганием (програмный SPI). И если Вам принципиально получить 24 бита, то можно релизовать его именно так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба У Renesas RX210 длина посылки SPI может быть 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 24, or 32 bit. Причем переключение может происходить во время передачи без "разрывов" (аппаратный чипселект SPI не дергается). Может кто еще напишет про особенности SPI в других микроконтроллерах, интересно где как реализуют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
logelectronix 0 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба В доках на 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 работают? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба Верно, мне тоже интересно неужто все 8-битным SPI работают? Там где скорость не критична достаточно 8 битного. Когда по скорости и таймингам нужно выжать максимум (например, при развертке VGA картинки) требуется выставлять максимально возможную длину SPI-слова, чтобы минимизировать число DMA-транзакций, т.к. между DMA-запросом и DMA-транзакцией может быть более 12 тактов (для Cortex-M). При 16-битном SPI-слове и буфере, передаваемом через DMA, нет промежутков между словами даже на FSCK = FCPU / 2. Если использовать 8-битные слова, то между посылками есть паузы. В большинстве задач эти паузы не критичны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
logelectronix 0 18 апреля, 2016 Опубликовано 18 апреля, 2016 (изменено) · Жалоба Угу, звучит логично. А что посоветуете в качестве программатора/отладчика и отладочной платы? Для STM присмотрел STlink и дискавери (хватит или не?). Или есть альтернативы получше? А для AVR - AVRDragon или это ни к чему? Фирма платит, но платит 1 раз. Не хотелось бы нарваться на г. Буду брать что-то одно ессно. Изменено 19 апреля, 2016 пользователем Herz Избыточное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 18 апреля, 2016 Опубликовано 18 апреля, 2016 · Жалоба А что посоветуете в качестве программатора/отладчика и отладочной платы? Для STM32 лучшая на мой взгляд отладка: STM32F4DISCOVERY. Хотя многое зависит от решаемых задач. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба Может кто еще напишет про особенности SPI в других микроконтроллерах, интересно где как реализуют. На OMAP-L137, насколько помню, через старшую часть записываемого слова можно управлять чип-селектами (причём там их может быть несколько на одном порту) во время передачи блока данных. Верно, мне тоже интересно неужто все 8-битным SPI работают? Нет. Каждый раз выбираем, то что удобнее в данном случае. Но чем длиннее слово -> тем меньше пересылок -> меньше загрузка шины МК. Также очень помогает наличие FIFO в SPI-контроллере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба :bb-offtopic: а у кого есть нестандартная, не кратная 8 бит, настройки SPI? очень хотелось бы 17 бит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба а у кого есть нестандартная, не кратная 8 бит, настройки SPI? очень хотелось бы 17 бит Lpc17? Писал выше что если верить докам то он может иметь от 8 до 16 бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 19 апреля, 2016 Опубликовано 19 апреля, 2016 · Жалоба :bb-offtopic: а у кого есть нестандартная, не кратная 8 бит, настройки SPI? У stm32f030 есть SPI с шириной от 4 до 16 бит, но т.к. 17 - простое число... это мало чем поможет. Пожалуй, самым простым решением будет - ногодрыг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба 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бит конкатенацией нескольких регистров слайсов последовательно). Опять-же - без ногодрыга и перепрограммирований режима в процессе передачи пакета слов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 апреля, 2016 Опубликовано 20 апреля, 2016 · Жалоба Самым простым решением будет выставить размер 9 бит - передать старшие 9 бит, дождаться опустошения сдвигового регистра, выставить размер 8 бит, передать оставшиеся 8 бит. А в чем это принципиально отличается от ногодрыга? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться