23:59
3,5 анонимуса
Если общение с микросхемой происходит через SPI, то проверьте по документации, каков размер пакетов.
Если он не кратен 8 битам, лучше применения микросхемы избегать. Т.к. в микроконтроллерах пересылка данных по SPI часто осуществляется побайтно. И чтобы обеспечить правильную работу с нецелыми байтами, приходится очень сильно извращаться, например делать отдельную схему, которая будет проглатывать "лишние" биты, идущие от микроконтроллера.
Как хорошо, что в конкретном случае решением этой проблемы занимаюсь не я.
Если он не кратен 8 битам, лучше применения микросхемы избегать. Т.к. в микроконтроллерах пересылка данных по SPI часто осуществляется побайтно. И чтобы обеспечить правильную работу с нецелыми байтами, приходится очень сильно извращаться, например делать отдельную схему, которая будет проглатывать "лишние" биты, идущие от микроконтроллера.
Как хорошо, что в конкретном случае решением этой проблемы занимаюсь не я.
08.06.2018 в 09:33
08.06.2018 в 15:04
08.06.2018 в 15:20
Стороной, был такой опыт))) Спасибо, больше не буду))
08.06.2018 в 18:06
08.06.2018 в 18:22
08.06.2018 в 23:57
09.06.2018 в 03:00
Так вот, если блок SPI сам мучает ножку chip select, то он просто откажется в середине байта менять её состояние. У него указано -- сколько байт передать и куда. Вот он ножку поставит в правильное положение, передаст, а потом передвинет обратно. И у нас в любом случае останется ошмёток посылки, с которым целевая микросхема не будет знать что делать. А следующую посылку микросхема начнёт отсчитывать с нуля, когда опять chip select дёрнется.
Если же мы вручную дёргаем этот сигнал, не загружая SPI этой работой (честно говоря, я пока не посмотрел, как это релизовано в том микроконтроллере, с которым мы будем работать -- умеет SPI сам дёргать чип селект или не умеет), то перед нами встаёт ещё более суровая работа. Нам надо программно подкараулить, когда SPI передаст нужное число бит, и в этот момент изменить чип селект, чтобы остальные биты микросхема проигноировала. Такое подкарауливание даже если и можно реализовать, то это во-первых, явный костыль, а во-вторых, будет отнимать процессорное время, которое можно было бы занять чем-нибудь более полезным.
===
А даже если у нас решены проблемы, описанные мной выше, то твой подход может сработать, только если нам надо постоянно передавать пакеты. А если нам надо только один пакет, что мы пошлём как начало следующего? Это необходимо для завершения передачи первого байта. Какой-нибудь мусорный пакет начнём передавать?
09.06.2018 в 11:39
Но так на каждое устройство уходит целый таймер.
Если же немного уйти в сторону софта, то можно также по достижению нужного числа битов генерировать прерывание, в обработчике которого уже разбираться, какой именно CS нужно изменить.
Так на каждую группу микросхем с одинаковым размером пакета уходит один канал таймера.
С использованием CS вообще уходит необходимость играться с битами, так как ненужные биты будут просто игнорироваться.
(Сам так не делал, но определенно попробую, если столкнусь с этой проблемой).
09.06.2018 в 22:14