Последнее время тематика интернета вещей становится все более и более горячей — однако в большинстве случаев, если речь заходит о работе с какими-то базовыми аппаратными решениями, то беседа сводится либо к готовым модулям, либо, реже, к чипам выпуска прошлых лет. Тем временем, в 2015 году компания Texas Instruments выпустила очередную линейку систему на кристале CC13xx-CC26xx — крайне интересных с точки зрения соотношения производительности, энергопотребления и возможностей. Эти випы имеют на борту основное ядро ARM Cortex-M3, второе ядро Cortex-M0, эксклюзивно обслуживающее радиочасть, и… да, ещё и третье ядро — собственное 16-битное ядро TI для работы с периферией, так называемый Sensor Controller. При этом и по энергопотреблению комбайн получился крайне скромным — даже радиочасть значительно убавила по сравнению с чипами предыдущего поколения, CC2538.

Мы уже писали обзор существующих стандартов связи, в котором остановились на наиболее современном стандарте 6loWPAN. Данный стандарт описывает сетевой и транспортный уровни модели OSI, а физический и канальный уровни стандартизованы IEEE 802.15.4. Texas Instruments позаботились о нас, и отдали обработку MAC-уровня отдельному ядру Cortex-M0. Остальные уровни нужно обрабатывать на Cortex-M3. И тут нам на помощь приходит операционная система реального времени Contiki, в которой реализована поддержка стека 6loWPAN.

image

Однако традиционная проблема с новыми чипами — нехватка «коллективного опыта», то есть подробных описаний работы с ними, обхода багов и тому подобных вещей.

Что ж, будем его восполнять. Начнём с базового — сборка и отладка операционной системы Contiki для чипов CC2650. Допустим, мы еще любим красивые графические среды и отладку в них. Поэтому мы будем собирать Contiki под TI Code Composer Studio 6. Я пользуюсь Ubuntu 14.04 X86_64 для разработки, шаги под Windows будут очень похожи, за исключением установки тулчейна. В конце есть немного вкусностей...

Toolchain


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

git clone --recursive https://github.com/contiki-os/contiki.git

Собирать будем с помощью родной для проекта системой сборки GNU Make + GCC. Предполагается, что Make у вас уже стоит, виндоюзеры могут поставить его в составе CygWin. Скачиваем gcc-arm-none-eabi для соответствующей операционной системы и распаковываем куда удобно. Не забываем прописать в PATH!

wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
tar xz gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
cd gcc-arm-none-eabi-4_9-2015q3
export PATH=$PATH:`pwd`/bin
arm-none-eabi-gcc –v

Устанавливаем утилиту для склеивания прошивок SRecord, необходимую для сборки.

sudo add-apt-repository ppa:pmiller-opensource/ppa
sudo apt-get update
sudo apt-get install srecord

Теперь попробуем собрать код. Заходим в сорцы и пробуем собрать. $CONTIKI_DIR заменяем на свой путь. Собираю я обычно в 4 потока, количество регулируется параметром -jN

cd $CONTIKI_DIR/examples/cc26xx
make -j4 TARGET=srf06-cc26xx BOARD=srf06/cc26xx cc26xx-demo
ls cc26xx-demo.srf06-cc26xx

Собралось, отлично, идем дальше.

Прошивка


Один из путей залить прошивку на сам чип это пользоваться отдельными флешерами. Техас предлагает под линух софтину Uniflash, скачиваем и устанавливаем. Процесс установки хорошо описан в этом документе, раздел 4.9.
Для отладки я пользовался комплектом TI SRF06EB + CC2650, так что на его примере и буду показывать.Создаем новую таргет конфигурацию. Програматор с чипом должен быть уже подключен.
image

Заходим в Programs, открываем файл прошивки Add и жмакаем Program.
image

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

Code Composer Studio


Скачиваем TI Code composer Studio for Wireless Connectivity для своей платформы. Для установки настоятельно рекомендую воспользоваться installation guide с сайта TI.

  • Запускаем
    image

  • Заходим Files -> New -> Other...
  • Выбираем Makefile Project With Existing Code
    image

  • Заполняем названия, путь к директории с Contiki и выбираем Crocc GCC
    image

  • Заходим в настройки проекта -> C/C++ Build, прописываем команду сборки make -j4 TARGET=srf06-cc26xx BOARD=srf06/cc26xx и путь до директории, нажав кнопку Workspace...
    image

  • Build — собралось, промежуточная победа!
    • Не собралось
      Возможно CCSv6 не подцепила переменную PATH и не может найти тулчеин. Исправляем: vim /etc/profile.d/env_vars.sh
      export ARM_TOOLCHAIN_HOME=/home/$USER/soft/gcc-arm-none-eabi/gcc-arm-none-eabi-4_9-2015q3
      export PATH=$PATH:$ARM_TOOLCHAIN_HOME/bin

Настраиваем отладку


Для отладки необходимо, чтобы папка с сорцами Contiki лежала в рабочей директории CCSv6


  • Нажимаем на проекте правой кнопкой -> добавить файл -> Target Configuration File
    image

  • Выбираем отладчик XDS100v3 и чип CC2650 как на скрине
    image

  • Нажимаем в форме Save и Test Connection
    image

  • Нажимаем правой кнопкой по свежесозданной конфигурации -> Debug As -> Debug Configurations

    • Слева создаем новую конфигурацию
    • Заполняем путь к недавно созданной Target Configuration
    • Apply
      image

    • Во вкладке Program заполняем поля Project и Program — путем к собраной прошивке
      image

    • Apply
    • Debug
    • Собралось, прошилось, но говорит No source available
    • Открываем contiki/cpu/cc26xx-cc13xx/Makefile.cc26xx-cc13xx
    • Добавляем ключ сборки с отладочными символами CFLAGS += -g
    • Убираем оптимизации: меняем -O2 и -Os на -O0
    • Сохраняем
    • Заходим снова в Debug Configurations
    • Нажимаем Debug
    • Вуаля
      image


Теперь у нас есть возможность полноценной отладки Contiki в Code Composer Studio под CC2650!


Заключение


Описанная последовательность действий является чуть ли не единственно рабочей. На пути к этому было потрачено много времени и нервов, вплоть до обращения в тех-поддержку TI. Есть еще возможность использовать голый Eclipse в качестве среды, но мои изыскания показали, что это условно рабочее решение. Мне так и не удалось запустить отладку в Eclipse, проблема заключалась в GDB-сервере, который никак не хочет подгружать возможность использования hardware-breakpoints. Если кто хочет попробовать, путь описан в документе TI SWRA446.

Увидеть глазами


27 февраля будет проходить офлайн встреча блога Catethysis.ru, на которой буду в этот раз рассказывать и показывать как програмировать MESH-сети. Всех, кто дочитал до конца, милости просим!

Комментарии (7)


  1. Costic
    19.02.2016 20:32

    Железка новая и действительно интересная. Из статьи сделал вывод, что переходить на Linux для разработки «опять» ещё рано. Похоже, IAR как среда отладки/программирования и тут обскакала Code Composer, несмотря на свой примитивный редактор. И раз уж вы используете CC26xx, то тут понадобятся Smart RF Studio и Packet Sniffer, а они вроде только под Windows.
    1) А не подскажете, вы усилитель (range extender) СС2590 не пробовали к этой штуке подключать (или планируете)?
    2) С интересом прочитал бы статью о результатах замеров дальности+скорости. К сожалению, только для nRF24 LNA видел подобную статью. Вы проводили такие измерения для CC13xx/26xx?


    1. morsview
      19.02.2016 20:44

      Да, тут нет решения работающего из коробки, особенно это касается новых разработок. Если раньше перейти на Linux для разработки под всевозможные микропоцессоры было невозможно, то сейчас есть примеры и готовые пути. Но тут конечно на вкус и цвет все фломастеры разные. Smart RF Studio не особо нужен, а снифер есть на основе Wireshark.
      1) Пока не пробовали, и не особо нужно с учетом наших задач.
      2) Такие измерения будем проводить, и будет отдельная статья.


      1. radiolok
        19.02.2016 21:28

        можете про снифер на основе Wireshark поподробнее рассказать? а то у меня свистки на 433 и 868 МГц есть а поднять их под linux давным давно не получилось


        1. morsview
          20.02.2016 00:09

          Собственно по этому мануалу http://processors.wiki.ti.com/index.php/Contiki_sniffer


  1. ZafiRUS
    20.02.2016 00:01

    А как с документацией на эти чипы? Насколько много необъясненных мест?
    А то у TI с доками какая-то прям беда. Из текущего, например, процесс загрузки tms320c6670 описан художественным языком, вместо нормально описания, что, в каком формате, куда… На какой тактовой частоте сидят таймеры тоже ни в документе о тактировании, ни в документе о таймерах, мы так и не нашли. Разборки с ДМА — тоже квест.
    Кстати, заявленная поддержка linux тоже оказалась пшиком, так как sdk для чипов не определился CCStudio как валидный.


    1. morsview
      20.02.2016 00:05

      В документации действительно много нетривиальных мест, хотя по сути все описано. Зачастую по периферии приходится смотреть документацию по предыдущему поколению СС2538, периферия совпадает процентов на 60 и лучше описана в уже отработанном TI документе.
      Как видите у меня на линуксе все завелось, хотя отладкой и средой не пользуюсь практически. За пару месяцес только раз понадобилось.


  1. Atronil
    23.02.2016 15:30

    Спасибо за статью, правда на работе мы с виндой работаем и чипом TI1310, хочу добавить что есть еще дополнительные возможности флэша, кроме JTAG, как то SPI, UART. Хотя эти интерфэйсы проигрывают в скорости JTAGy.

    Большим плюсом этого чипа является, хороший datasheet для работы по голубому зубу.