zHz00 Untitled

четверг, 07 июня 2018
23:59 3,5 анонимуса
Если общение с микросхемой происходит через SPI, то проверьте по документации, каков размер пакетов.

Если он не кратен 8 битам, лучше применения микросхемы избегать. Т.к. в микроконтроллерах пересылка данных по SPI часто осуществляется побайтно. И чтобы обеспечить правильную работу с нецелыми байтами, приходится очень сильно извращаться, например делать отдельную схему, которая будет проглатывать "лишние" биты, идущие от микроконтроллера.

Как хорошо, что в конкретном случае решением этой проблемы занимаюсь не я.

@темы: Борьба с техникой, Электроника

URL
Был в буддийском монастыре. Подошел монах, поинтересовалс...
Я нарисован... Я нарисован, как и все другие, не очень ...
Любопытно, почему на компактах «заводского» изготовления ...
Меня уже затрахала эта реклама ширпотребной фирмы LG!.. ...
К программе Maya прилагаются (скачиваются с сайта) замеча...
Удивительно, как одно и то же место может ассоциироваться...

08.06.2018 в 09:33

08.06.2018 в 09:33
А если паковать в первый 1 байт от второго, во второй 2 байта от третьего и т.д.? Или там явное разделение должно между нецелыми байтами быть?
URL

08.06.2018 в 15:04

08.06.2018 в 15:04
Да на GPIO сделать. Но обычно 8 бит, чё...
URL

08.06.2018 в 15:20

08.06.2018 в 15:20
himself, поясни, что-то недопетриваю.
Стороной, был такой опыт))) Спасибо, больше не буду))
URL

08.06.2018 в 18:06

08.06.2018 в 18:06
[aa aa aa ab] [bb bb bb cc] [cc cc cd dd] и так далее. Переданы байты: a, b, c, начата передача: d.
URL

08.06.2018 в 18:22

08.06.2018 в 18:22
himself, в смысле, переданы ПАКЕТЫ a, b, c по 7 бит?
URL

08.06.2018 в 23:57

08.06.2018 в 23:57
zHz00, да-да, точно.
URL

09.06.2018 в 03:00

09.06.2018 в 03:00
himself, в SPI есть ещё одна линия, называется chip select. Она подводится к каждой микросхеме на шине (к каждой микросхеме по одной линии, их можно дёргать независимо). Когда мы хотим работать с одной из микросхем, этим сигналом мы её "выбираем". Если сигнал не активен, то микросхема пропускает мимо ушей то, что творится на шине. Чтобы микросхема правильно работала, сигнал chip select должен правильно подниматься и опускаться в начале и в конце посылки (полярность зависит от конкретной микросхемы).

Так вот, если блок SPI сам мучает ножку chip select, то он просто откажется в середине байта менять её состояние. У него указано -- сколько байт передать и куда. Вот он ножку поставит в правильное положение, передаст, а потом передвинет обратно. И у нас в любом случае останется ошмёток посылки, с которым целевая микросхема не будет знать что делать. А следующую посылку микросхема начнёт отсчитывать с нуля, когда опять chip select дёрнется.

Если же мы вручную дёргаем этот сигнал, не загружая SPI этой работой (честно говоря, я пока не посмотрел, как это релизовано в том микроконтроллере, с которым мы будем работать -- умеет SPI сам дёргать чип селект или не умеет), то перед нами встаёт ещё более суровая работа. Нам надо программно подкараулить, когда SPI передаст нужное число бит, и в этот момент изменить чип селект, чтобы остальные биты микросхема проигноировала. Такое подкарауливание даже если и можно реализовать, то это во-первых, явный костыль, а во-вторых, будет отнимать процессорное время, которое можно было бы занять чем-нибудь более полезным.

===

А даже если у нас решены проблемы, описанные мной выше, то твой подход может сработать, только если нам надо постоянно передавать пакеты. А если нам надо только один пакет, что мы пошлём как начало следующего? Это необходимо для завершения передачи первого байта. Какой-нибудь мусорный пакет начнём передавать?
URL

09.06.2018 в 11:39

09.06.2018 в 11:39
zHz00, караулить можно не программно, а аппаратно: перед записью байта в регистр SPI, поднимать (опускать) ногу, на которой висит CS "клиента" и сбрасывать хитро настроенный таймер, считающий фронты (спады) на выходе SCK SPI (физически заведенном на вход таймера для внешнего тактирования) и, по достижению нужного числа переданных битов, опускать (поднимать) наш импровизированный CS с помощью режима генерации ШИМ.

Но так на каждое устройство уходит целый таймер.

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

Так на каждую группу микросхем с одинаковым размером пакета уходит один канал таймера.

С использованием CS вообще уходит необходимость играться с битами, так как ненужные биты будут просто игнорироваться.

(Сам так не делал, но определенно попробую, если столкнусь с этой проблемой).
URL

09.06.2018 в 22:14

09.06.2018 в 22:14
roadischosen, тот, кто решал эту проблему, в итоге собрал схему на мелкой логике, которая делала именно то, что ты описал -- считала клоки и в нужный момент меняла чип селект. Сегодня обсуждали, что если микросхемы не поменяем на нормальные, в следующей версии платы просто поставим ПЛИС, куда эта или подобная схема будет зашита.
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail