repstosw 18 4 января, 2023 Опубликовано 4 января, 2023 (изменено) · Жалоба Чип трансивера: CMT2300A Использую длинный пакет следующего вида: преамбула 8 байт 0xAA синхрослово 4 байта данные 2048 байт (8 последних байт - CRC64 - считается программно) Чстота: 435 МГц Модуляция: 2FSK Битрейт: 250 kbps Девиация частоты: +/- 125 кГц Полоса приёмника: 500 кГц Включены: АРУ (AGC), АПЧ (AFC). Приемник и передатчик находятся рядом, оба с антеннами. Мощность передатчика: -10 dBm При приёме, пакет иногда идёт с ошибкой. В среднем на 20 - 100 пакетов - 1-2 с ошибкой. Если включить манчестерский кодер, то ошибочных пакетов нет, но скорость снижается в 2 раза. Предварительно сделал вывод, что битые пакеты возникают из-за плохой синхронизации бит данных в приёмнике. Что ещё можно сделать, чтобы на таком длинном пакете приём был без ошибок? Пакеты содержат потоковое видео/звук. Вариант с переотправкой пакета - не предлагать. Изменено 4 января, 2023 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 4 января, 2023 Опубликовано 4 января, 2023 · Жалоба В HopeRF вопрос засылали? Я с ними переписывался (по более простым вопросам), нормально отвечали. На английском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 1 февраля, 2023 Опубликовано 1 февраля, 2023 · Жалоба On 1/4/2023 at 2:17 PM, repstosw said: При приёме, пакет иногда идёт с ошибкой. В среднем на 20 - 100 пакетов - 1-2 с ошибкой. Если включить манчестерский кодер, то ошибочных пакетов нет, но скорость снижается в 2 раза. Предварительно сделал вывод, что битые пакеты возникают из-за плохой синхронизации бит данных в приёмнике. Наконец-то удалось найти и устранить причину ошибки. При передаче терялся один байт в пакете и в конце пакета добавлялся лишний байт. Это происходило из-за того, что линия данных у 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 МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 1 февраля, 2023 Опубликовано 1 февраля, 2023 · Жалоба Ну так там все задержки в примерах программ расписаны! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 2 февраля, 2023 Опубликовано 2 февраля, 2023 · Жалоба 8 hours ago, V_G said: Ну так там все задержки в примерах программ расписаны! Задержек линии SDIO при изменении состояния "ввод-вывод" нет. Проблема в самом MCU: после смены направления, необходимо подождать немноо, чтобы GPIO устаканился. А потом читать-записывать биты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 2 февраля, 2023 Опубликовано 2 февраля, 2023 · Жалоба 18 hours ago, repstosw said: И нужно было вводить задержку в микроконтроллере после переключение порта с ввода на вывод (и наоборот): А ещё лучше вместо задержки - вставить инструкцию dsb(). Тогда всё чётко, быстро и без глюков😃 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться