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

Философия аппаратного SPI - чем занять МК?


Рекомендуемые сообщения

35 минут назад, ARV сказал:

Это надо, чтобы искусственный интеллект в нем был

 

35 минут назад, ARV сказал:

Это известно только программисту

это да...

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

1 час назад, ARV сказал:

Это надо, чтобы искусственный интеллект в нем был :) Как узнать, когда "заруливать" этим пином?

А что мешает иметь переменную, в которую записывается количество байт для передачи? Тогда работа SPI будет выглядеть так:

  1.  Записать в переменную количество байт.
  2. Опустить CS.
  3. Записать первый байт в регистр SPI
  4. В прерывание по SPI щелкать счетчик переданных байт и сравнивать с требуемым. Если мало, отправлять следующий байт.
  5. При достижении требуемого значения счетчика - поднять CS.

Я по такому принципу работаю с UART.

А флаг опустошения буфера довольно удобная вещь. На тех же STM32 это позволяет получить безразрывную передачу данных по SPI. Там буфер живет отдельно от сдвигового регистра передачи и его опустошение возникает раньше окончания передачи. В результате новый байт данных оказывается в буфере еще до окончания отправки предыдущего.

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

Только что, BARS_ сказал:

А что мешает иметь переменную

Мы тут мечтали об аппаратном дрыгании CS-ом, без лишних прерываний. Так-то оно все понятно...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Только что, BARS_ сказал:

Легко, но

не нужно :) 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Аппаратное дёрганье CS'ом, ИМХО, ненужная фигня. Использовать можно будет только с одним девайсом. Тогда каков в нём смысл, если можно CS девайса повесить железно и навечно.

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

Ну... чисто теоретически... при наличии DMA вполне можно было бы битик в регистре DMA-контроллера выделить под это. Скажем, со смыслом "Опустить CS на время передачи или приема буфера". Ну или как-то так, возможно, с вариантами...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

26 минут назад, Alex сказал:

Тогда каков в нём смысл, если можно CS девайса повесить железно и навечно

В смысле держать его все время в опущенном состоянии? Не прокатит.

 

18 минут назад, Alex сказал:

Есть в PIC'ах такое (аппаратный CS)

Это в любом МК есть.

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

5 минут назад, BARS_ сказал:

Это в любом МК есть.

Судя по "мечтаниям", находящихся выше в теме, - не во всех. Или я что-то путаю ? :unsure:

6 минут назад, BARS_ сказал:

Не прокатит.

Да, скорее всего...
Значит смысл, всё-такие, есть.

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

Только что, BARS_ сказал:

Есть то во всех

Есть-то во всех, да вот только дергается программно...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

11 минуту назад, Alex сказал:

Судя по "мечтаниям", находящихся выше в теме, - не во всех. Или я что-то путаю ? :unsure:

Есть такое мнение, что путаете. Потому как в ПИКах нет никакого CS, а есть SS - slave select. Это не выход, а ВХОД выбора слейва, если этот SPI работает в режиме slave.

Делать аппаратный CS бессмысленно, ибо есть минимум ДВА вида CS. Один накрывает данные, а второй завершает. Реализовать CS  легко на Output Compare, от которого и запускается транзакция SPI. Скажем, для внешнего SPI АЦП я так и делаю. Тем более, что там CS - это и есть запуск преобразования.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

2 минуты назад, ARV сказал:

дергается программно

Дергается именно аппаратно. На счет AVR не вспомню, на в C8051F и STM он может дергаться аппаратно после каждого окончания передачи.

 

2 минуты назад, my504 сказал:

Делать аппаратный CS бессмысленно

Было бы бессмысленно - не делали бы, а его делают. Вот только применения ему я найти так и не смог, ибо очень редко дело заканчивается одной передачей и передать надо подряд несколько байт при опущенном CS.

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

48 минут назад, BARS_ сказал:

Легко, но после каждого байта

Не всегда. В передаче "команда и многа, многа данных потом" дернуть надо в самом конце, а не посередине. Иначе очередной байт данных превратится в команду. Хорошо, если не опознанную.

 

14 минуты назад, BARS_ сказал:

Это в любом МК есть.

Есть-то есть. Только назначение другое - перевести блок SPI в статус SLAVE. У новых аттинек есть бит SSD - отключает CS от физического пина. После чего последним можно пользоваться как обычным GPIO. В ATMEGA такого нет. Если SPI мастер, то CS можно только на выход. Или на вход, но только "1".

1 час назад, BARS_ сказал:

А что мешает иметь переменную, в которую записывается количество байт для передачи? Тогда работа SPI будет выглядеть так:

  1.  Записать в переменную количество байт.
  2. Опустить CS.
  3. Записать первый байт в регистр SPI
  4. В прерывание по SPI щелкать счетчик переданных байт и сравнивать с требуемым. Если мало, отправлять следующий байт.
  5. При достижении требуемого значения счетчика - поднять CS.

Если есть свободная ОЗУ, то с таким алгоритмом не грех через указатель заносить данные в SPI там же в прерывании.

1 час назад, BARS_ сказал:

Там буфер живет отдельно от сдвигового регистра передачи и его опустошение возникает раньше окончания передачи. В результате новый байт данных оказывается в буфере еще до окончания отправки предыдущего.

В аттиньке всё ровно тоже самое.

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

Только что, BARS_ сказал:

на в C8051F и STM он может дергаться аппаратно

Повезло кому-то :) Можно в 595-е регистры полностью аппаратно выводить :) 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, my504 сказал:

Мне не встречался. 

Выше я дал примеры МК. При настройке SPI указывается, какой режим работы 4 или 3 провода.

 

2 минуты назад, parovoZZ сказал:

Не всегда. В передаче "команда и многа, многа данных потом" дернуть надо в самом конце, а не посередине.

Так я о том и говорю...

 

3 минуты назад, parovoZZ сказал:

Есть-то есть. Только назначение другое - перевести блок SPI в статус SLAV

Ошибся, не в любом, а во многих. И именно при работе мастером.

 

3 минуты назад, parovoZZ сказал:

Если есть свободная ОЗУ, то с таким алгоритмом не грех через указатель заносить данные в SPI там же в прерывании.

Я, обычно, так и делаю. Данные пишутся в массив, а массив уже выплевывается сам в либо в прерывании, либо через DMA. Зависит от количества данных и типа МК. В UART делаю ровно точно так же.

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

31 минуту назад, my504 сказал:

Это не выход, а ВХОД выбора слейва

Марк, посмотри референс по SPI на PIC32. SS является и выходом (при мастере) и входом (при слейве).
Сам лично дёргал им, управляя CS'ом SD-карты.

PS: В более младших семействах - не знаю, есть ли аппаратный дрыг. Не встречал.

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

1 час назад, Alex сказал:

Марк, посмотри референс по SPI

Да, есть режим фрейма, где генерируется синхроимпульс на этой ноге мастером (у 24-х/33-х тоже есть), но он не может служить ни накрывающим данные, ни загрузкой после транзакции. Это именно синхроимпульс для определенных протоколов и расположен он либо перед 15 разрядом либо прямо во время передачи 15 разряда. То есть использовать этот режим для какого нибудь 595-го, SPI АЦП или ЖК-сегментного стекла совершенно невозможно. Зато два МК легко синхронизируются путем соединения SS-ов мастера и слейва.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

2 часа назад, BARS_ сказал:

Я, обычно, так и делаю. Данные пишутся в массив, а массив уже выплевывается сам в либо в прерывании, либо через DMA. Зависит от количества данных и типа МК. В UART делаю ровно точно так же.

Да, DMA - это сказка. Но в дешманских МК его нет.

А вот свою работу с SPI я перепишу через указатели. Идея мне понравилась))

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

9 часов назад, BARS_ сказал:

он не даст выигрыша.

Выигрыш во времени - не единственный аргумент за ДМА. Выигрыша как такового может и не быть, зато структура алгоритма становится гораздо более простой и читабельной, не перегруженной мусором из драйверов. Поэтому, если есть свободные каналы ДМА, вполне уместны даже  достаточно редкие транзакции. Тут важен не размер пакета, а периодичность транзакций. Чтобы источник запросов на перегрузку данных (DMA request) мог быть автоматическим (таймер или иное событие).

10 часов назад, parovoZZ сказал:

Да, DMA - это сказка. Но в дешманских МК его нет.

Это не соответствует истине. Cortex M0/M0+ очень дешев и имеет DMA. ДМА так же есть в PIC24FJ256GA702, тоже недорогом МК.

Впрочем, все зависит от того, что считать дешевизной. За 20 рублей наверное в МК ДМА не будет.

戦う前に相手のベルトの色に注目

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

3 часа назад, my504 сказал:

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

Весь код драйвера находится внутри функции обработчика прерывания и особо не мешает. Да и скорость работы порой намного важнее, чем красивый код.

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

23 минуты назад, BARS_ сказал:

Весь код драйвера находится внутри

Во первых, далеко не весь. Ну или обработчик содержит то, что не должен содержать - обработку данных. В состав драйвера так или иначе входит некая функция main-а, которая обрабатывая флаги выставленные в обработчиках прерываний, собственно и  занимается данными в первичной их обработке (так, чтобы они соответствовали уровню абстракций основного кода). Ну и структура самих драйверов, очень желательно. чтобы была прозрачной. А то получаются обработчики в которых играют половина имеющихся драйверов и в таком ISR черт ногу сломит.

Во вторых,  МК в котором драйверы создают настолько критический код, что нужно жертвовать структурой алгоритма - это неправильно выбранный МК. Очередной апгрейд под новые требования приведет к полной смене схемотехники. Скупой платит дважды.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

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