23:59 

3,5 анонимуса

zHz00
Если общение с микросхемой происходит через SPI, то проверьте по документации, каков размер пакетов.

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

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

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

URL
Комментарии
2018-06-08 в 09:33 

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

2018-06-08 в 15:04 

Стороной
Техническая причина
Да на GPIO сделать. Но обычно 8 бит, чё...

2018-06-08 в 15:20 

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

URL
2018-06-08 в 18:06 

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

2018-06-08 в 18:22 

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

URL
2018-06-08 в 23:57 

himself
zHz00, да-да, точно.

2018-06-09 в 03:00 

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

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

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

===

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

URL
2018-06-09 в 11:39 

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

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

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

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

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

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

2018-06-09 в 22:14 

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

URL
     

Untitled

главная