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

CMT2300A: приходят битые пакеты иногда

Чип трансивера: CMT2300A

Использую длинный пакет следующего вида:

преамбула 8 байт 0xAA

синхрослово 4 байта

данные 2048 байт (8 последних байт - CRC64 - считается программно)

Чстота: 435 МГц

Модуляция: 2FSK

Битрейт: 250 kbps

Девиация частоты: +/- 125 кГц

Полоса приёмника: 500 кГц

Включены: АРУ (AGC), АПЧ (AFC).

Приемник и передатчик находятся рядом, оба с антеннами.  Мощность передатчика:  -10 dBm

 

При приёме, пакет иногда идёт с ошибкой.  В среднем на 20 - 100 пакетов - 1-2 с ошибкой.

Если включить манчестерский кодер, то ошибочных пакетов нет, но скорость снижается в 2 раза.

Предварительно сделал вывод, что битые пакеты возникают из-за плохой синхронизации бит данных в приёмнике.

 

Что ещё можно сделать, чтобы на таком длинном пакете приём был без ошибок?

Пакеты содержат потоковое видео/звук.  Вариант с переотправкой пакета - не предлагать.

 

image.thumb.png.fdc82bf78ddcd0560b1ca4d185100917.png

image.thumb.png.d62b46740ebebfb7b6823edc2ccb9e65.png

image.thumb.png.8b40af336937bef3c5817c0f829d0a8e.png

image.thumb.png.2cb69d7d3f8f532d3128fbed86c8554c.png

image.thumb.png.aa1d080ca9c1052118722110f2305a9d.png

image.thumb.png.35746865c7eb978b150a5e396801e76e.png

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

Поделиться сообщением


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

В HopeRF вопрос засылали? Я с ними переписывался (по более простым вопросам), нормально отвечали. На английском.

Поделиться сообщением


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

On 1/4/2023 at 2:17 PM, repstosw said:

При приёме, пакет иногда идёт с ошибкой.  В среднем на 20 - 100 пакетов - 1-2 с ошибкой.

Если включить манчестерский кодер, то ошибочных пакетов нет, но скорость снижается в 2 раза.

Предварительно сделал вывод, что битые пакеты возникают из-за плохой синхронизации бит данных в приёмнике.

Наконец-то удалось найти и устранить причину ошибки.

При передаче терялся один байт в пакете и в конце пакета добавлялся лишний байт.

image.thumb.png.37ce443d57c5966872b4ea7251680493.png

 

Это происходило из-за того, что линия данных у CMT2300A объединена на чтение и запись. И нужно было вводить задержку в микроконтроллере после переключение порта с ввода на вывод (и наоборот):

//cmt_spi.c

#define cmt_spi3_sdio_out()     {PC_CFG0_REG|=1;DelayTick(6);}  /* PC0 => SDIO(out) */
#define cmt_spi3_sdio_in()      {PC_CFG0_REG&=~1;DelayTick(6);} /* PC0 => SDIO(in)  */

 

MCU Allwinner V3s @ 1200 МГц.

 

Поделиться сообщением


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

8 hours ago, V_G said:

Ну так там все задержки в примерах программ расписаны!

Задержек линии SDIO при изменении состояния "ввод-вывод" нет.

Проблема в самом MCU: после смены направления, необходимо подождать немноо, чтобы GPIO устаканился.  А потом читать-записывать биты.

Поделиться сообщением


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

18 hours ago, repstosw said:

И нужно было вводить задержку в микроконтроллере после переключение порта с ввода на вывод (и наоборот):

А ещё лучше вместо задержки - вставить инструкцию dsb().

Тогда всё чётко, быстро и без глюков😃

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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