В процессе проектирования схем для CC2652R и изучения референс-мануалов и апноутов, у меня скопилось много записей по Hardware Design и я решил оформить эти записи в одну статью, чтобы помочь другим и себе, если забуду, быстро разобраться в нюансах аппаратной конфигурации микроконтроллера.
Вступление
Те, кто впервые сталкиваются с TI и их номенклатурой беспроводных микроконтроллеров, по началу могут запутаться в их характеристиках, семействах и как использовать тот или иной чип. В документации TI есть очень удобная таблица, которая описывает все актуальные на данный момент решения и чем они отличаются друг от друга:
В таблице можно увидеть и CC2652R, тот МК, с которым работаю я. У него есть несколько модификаций. CC2652RB — МК, которому не нужен отдельный кварц на 48 МГц, CC2652RP — имеет встроенный усилитель мощности на 20 dBm.
В первой статье я уже описывал более-менее все характеристики CC2652R, отдельно нашел еще вот такую блок-схему из референс-мануала, которая иллюстрирует написанное мной более наглядно. Также описание данной схемы, можно найти на сайте Компэла и в их вебинаре.
Описание выводов CC2652R
Первым делом я отрисовал УГО в Kicad (найти его можно в моем репозитории компонентов), разделив его на две части следующим образом. Основная часть:
и порты ввода / вывода:
DIO_23 — DIO_30 (36 — 43) имеют возможность ввода аналоговых сигналов. АЦП 12-битный на 8 каналов.
DIO_5 (10), DIO_6 (11), DIO_7 (12), JTAG_TMSC (24), DIO_16 (26), DIO_17 (27) маркируются как high-drive capability и рассчитаны на больший ток, чем обычные порты ввода / вывода.
DCDC_SW (33) выход внутреннего DC/DC конвертера.
DCOUPL (23) служит для развязки внутреннего регулируемого цифрового источника питания 1.27 В. От этого вывода нельзя питать другие элементы схемы.
JTAG_TMSC (24) вывод отладчика.
JTAG_TCKC (25) вывод отладчика.
DIO_16 (26) вывод отладчика JTAG_TDO (опционально).
DIO_17 (27) вывод отладчика JTAG_TDI (опционально).
RESET_N (35) вход сброса, активный уровень — низкий, не имеет внутреннего подтягивающего резистора как на STM32!
VDDR (45) и VDDR_RF (48) входы питания, должны быть запитаны от внутреннего DC/DC конвертера или внутреннего LDO по следующей схеме:
Индуктивность L1 и конденсатор C12 22u необходимо располагать как можно ближе к выводу 33. Если выход DCDC_SW (33) не используется, оставить не подключенным. В этом случае индуктивность между ним и VDDR можно убрать, но конденсатор 22u необходимо оставить.
VDDS (44) основной вывод питания микросхемы, от 1.8 В до 3.8 В.
VDDS2 (13), VDDS3 (22) выводы питания DIO.
VDDS_DCDC (34) питается от DC/DC конвертера, требуется подключать к VDDS, т.е. основному питанию микроконтроллера.
Последние 4 вывода соединяются вместе и запитываются следующим образом:
VSS (49) вывод ground pad под микросхемой, подключается к земле.
X48M_N (46) и X48M_P (47) входы кварцевого резонатора 48 МГц.
X32K_Q1 (3) и X32K_Q2 (4) входы кварцевого резонатора 32 кГц, если не используется, то оставляются не подключенными.
Неиспользуемые DIO рекомендуется оставлять без подключения.
Спросите, где остальная периферия, где UART, SPI, таймеры? А как оказалось, цифровая периферия CC26x2 может быть присвоена любому GPIO, что просто невероятно удобно. Нет необходимости, как в STM32 смотреть, где какой вывод и париться, что занял пины SPI1, включив сразу 2 UART и т.п. Назначаешь себе UART0 на любые выводы микроконтроллера и готово!
Референсная схема CC2652R
Теперь хочу обратиться к апноуту CC13xx CC26xx Hardware Configuration and PCB Design и извлечь из него как можно больше информации по Hardware Design для CC2652R, но описав ее сжато в рамках только этой статьи.
Когда проектируешь свою печатную плату необходимо следовать референсному дизайну максимально точно, насколько это возможно. Для микроконтроллера CC2652R такой платой является CC226x2REM-7ID. Ее описанию я и старался следовать в своей схеме (кликабельно):
RF Front-end
RF front-end может быть в одном из двух режимов: несимметричный и дифференциальный. Установка производится командой CMD_RADIO_SETUP:
Config.frontEndMode = 0x00
: Дифференциальный режим;Config.frontEndMode = 0x01
: Несимметричный режим RFP;Config.frontEndMode = 0x02
: Несимметричный режим RFN;
Несимметричный режим рекомендуется, когда не нужна максимальная выходная мощность, а нужна мощность около 0 dBm. Референсы на все режимы включения можно найти по ссылке в категории Design Files, где X — External Bias, I — Internal Bias, S — Single Ended, D — Differential.
48 MHz кварцевый резонатор
Нужен для тактирования микроконтроллера. Подробные рекомендации по выбору конденсаторов можно найти в разделе 6.4 документа.
32 kHz кварцевый резонатор
Опционален, вместо него можно использовать внутренний RC генератора на 32 кГц, что я и планирую сделать в своем устройстве. Нужен, когда требуется уменьшить потребление или для протоколов синхронизации.
Balun
Balun это часть схемы, которая преобразует дифференциальный сигнал в несимметричный. Имеет сдвиг фазы ±90° с помощью low-pass и high-pass фильтров. Если используется только один RF вывод, то balun не нужен, только фильтр до антенны.
Фильтр
LC-фильтр между balun и антенной необходим для подавления гармоник и согласования импедансов.
Антенна
CC2652R однодиапазонный микроконтроллер, поэтому в референс-дизайне используется Single-Band антенна на 2.4 ГГц. Референс-дизайн антенны подробно рассмотрен в предыдущей статье.
В целом, по антеннам у TI доступно 2 документа: Antenna Selection Quick Guide и Antenna Selection Guide. Также есть дополнительный документ CC-Antenna-DK2 and Antenna Measurements Summary, в котором есть вся исчерпывающая информация по антеннам.
Основное внимание следует уделить согласованию импедансов, для этого TI предлагает цепь П-фильтра рядом с антенной:
В данной схеме элемент ANT2 ставится всегда, даже когда антенна идеально согласована и обычно равно 0 Ом.
Bootloader выводы
Загрузчик может загружаться либо через UART, либо через 4-проводной SSI интерфейс. SSI0 более продвинутый интерфейс, нежели UART, но требует больше выводов. Для LAUNCHXL-CC26x2R1 используются следующие выводы:
UART0 RX | Вход с подтяжкой к питанию | DIO_2 |
UART0 TX | Выход без подтяжек | DIO_3 |
SSI0 CLK | Вход с подтяжкой к питанию | DIO_10 |
SSI0 FSS | Вход с подтяжкой к питанию | DIO_11 |
SSI0 RX | Вход с подтяжкой к питанию | DIO_9 |
SSI0 TX | Выход без подтяжек | DIO_8 |
JTAG отладчик
Подключение отладчика осуществляется к следующим выводам микросхемы:
JTAG_TMSC (24) вывод отладчика.
JTAG_TCKC (25) вывод отладчика.
DIO_16 (26) вывод отладчика JTAG_TDO (опционально).
DIO_17 (27) вывод отладчика JTAG_TDI (опционально).
RESET_N (35)
VDDS и VSS
Референс-дизайн печатной платы
Balun
Основная задача разместить его как можно более симметрично относительно выводов RF микроконтроллера. Как тут:
LC-фильтр
Лучший дизайн LC фильтра после balun’а показан ниже:
Самый нежелательный вариант выглядит следующим образом:
Развязывающие конденсаторы
Основные правила их размещения на печатной плате:
- Для лучшего результата размещайте конденсаторы в том же слое, что и активный компонент;
- Подводите питание сперва к конденсатору и уже потом к активному компоненту;
- Каждый конденсатор должен иметь свое переходное отверстие к земле;
- Размещать конденсатор надо как можно ближе к выводу питания активного компонента;
- Путь прохождения обратного тока между конденсатором и микросхемой должен быть как можно короче и прямее, для наименьшего импеданса;
DC/DC регулятор
Компоненты регулятора должны быть как можно ближе к выводу DCDC_SW как показано на рисунке ниже:
П-фильтр антенны
Согласующий фильтр следует располагать как можно ближе к точке запитывания антенны.
Линии передачи
Должны быть как можно короче и иметь импеданс 50 Ом, TXLine утилита, которая позволяет рассчитать импеданс длинных линий.
Симуляция
Если дизайн не соответствует референсному, то следует произвести симуляцию в Advanced Design System (ADS). Данный пакет программ проприетарен и стоит денег, если знаете open-source аналог напишите, пожалуйста, в комментариях.
Конфигурация питания
VDDS основной домен питания микроконтроллера 1.8-3.8 В, это то напряжение, которое нужно подать от внешнего источника питания. Для более наглядного представления вставлю схему из документации:
VDDR домен питания, который требуется запитать от внутреннего DC/DC или от внутреннего Global LDO 1.68 В или 1.95 В в режиме boost.
DCOUPL требует подключения внешнего конденсатора 1 мкФ для внутреннего LDO 1.28 В.
Микроконтроллер автоматически переключается между Global LDO и DC/DC, смотря что эффективнее, к примеру если VDDS падает ниже 2 В, то DC/DC не особо эффективен и МК переключается на питание от Global LDO.
Настройка CCFG для использования DC/DC конвертера:
#ifndef SET_CCFG_MODE_CONF_DCDC_RECHARGE #define SET_CCFG_MODE_CONF_DCDC_RECHARGE 0x0 // Use the DC/DC during recharge in powerdown // #define SET_CCFG_MODE_CONF_DCDC_RECHARGE 0x1 // Do not use the DC/DC during recharge in powerdown #endif #ifndef SET_CCFG_MODE_CONF_DCDC_ACTIVE #define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x0 // Use the DC/DC during active mode // #define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x1 // Do not use the DC/DC during active mode #endif
Для уменьшения стоимости и размера печатной платы можно VDDR запитать от внутреннего Global LDO, убрав DC/DC индуктивность, однако емкость 22мкФ рядом с VDDR по прежнему нужна. Cbulk VDDS расположить рядом с пином VDDS, а не VDDS_DCDC. DCDC_SW вывод оставить не подключенным.
Настройка CCFG для использования внутреннего Global LDO:
#ifndef SET_CCFG_MODE_CONF_DCDC_RECHARGE // #define SET_CCFG_MODE_CONF_DCDC_RECHARGE 0x0 // Use the DC/DC during recharge in powerdown #define SET_CCFG_MODE_CONF_DCDC_RECHARGE 0x1 // Do not use the DC/DC during recharge in powerdown #endif #ifndef SET_CCFG_MODE_CONF_DCDC_ACTIVE // #define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x0 // Use the DC/DC during active mode #define SET_CCFG_MODE_CONF_DCDC_ACTIVE 0x1 // Do not use the DC/DC during active mode #endif
Есть еще режим использования внешнего регулятора напряжения, описан в пункте 9.4, подробно на нем останавливаться не буду, статья, итак, уже довольно большая получилась.
На этом пока все, скоро будут еще статьи, следите за анонсами на моем канале.