Cc2540 usb dongle прошивка

Обновлено: 07.07.2024

В этом разделе вы узнаете, как активировать новый чип CC2540. Предоставленное руководство поможет пользователям, обладающими продуктами DFRobot BLE с повреждённым/удалённым загрузчиком, более не распознаваемыми на компьютере при подключении через USB-кабель.

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

В качестве примера мы воспользуемся платой DFRobot Bluno Mega2560. Другие продукты могут быть прошиты аналогичным способом.

Инструменты

  • Аппаратные средства
    • Программатор CC Debugger x 1
    • DFRobot BLE плата с удалённым загрузчиком x 1 (например, Bluno Mega2560)
    • MicroUSB кабель x 1
    • MiniUSB кабель x 1

    Весь процесс разделён на 3 части: 1. Запись загрузчика -> 2. Запись прошивки -> 3. Расшифровка прошивки.

    Примечание! Если вам нужно прошить новый чип CC2540, правильно подключайтесь к плате DFRobot BLE и не допускайте неверных соединений. С пропущенными шагами по установке программного обеспечения или драйвера CC Debugger можно ознакомиться в соответствующей инструкции по эксплуатации программатора.

    Запись загрузчика

    Шаг 1. Проводное соединение

    Пожалуйста, посмотрите на принципиальную схему вашей BLE-платы, и найдите в ней определение выводов интерфейса загрузки. На рисунке ниже (1) приведён пример от Bluno Mega2560. Интерфейс загрузки у BLE micro и Bluno Nano немного отличается, у Bluno - такой же.

    Соедините соответствующие выводы у Bluno Mega2560 и программатора в соответствии с рисунком (2):

    Шаг 2. Определение чипа CC2540

    Одновременно включите питание для программатора и Bluno Mega2560. Затем нажмите кнопку сброса "Reset" на программаторе. Если вы всё верно подключили, то светодиод у CC Debugger сменит цвет с красного (3) на жёлтый (4).

    Подключение прокграмматора CC Debugger к Bluno

    Запустите SmartRF Flash Programmer, он распознает целевой чип CC2540. Если этого не произошло, возможно, вы ранее что-то упустили.

    Шаг 3. Настройки и запись

    Настройте программу так, как показано на картинке ниже, и выберите файл SBL_BootloaderV2.0.hex. Далее, нажмите кнопку Perform Action. Процесс записи загрузчика закончится через несколько секунд и два встроенных в плату Bluno Mega2560 светодиода LINK / PAIR начнут регулярно мигать. Переходите к следующей части.

    Найстрока SmartRF Flash Programmer для CC2540

    Запись прошивки

    Запустите blunoFWDownloader и выберите прошивку для вашей платы. В нашем случае это SBL_Blemega2560V1.9.bin для Mega2560. И нажмите кнопку "стрелка вниз" для выполнения процесса записи, который закончиться спустя полминуты.

    Запись прошивки в BLE CC2540

    Расшифровка прошивки

    В устройство можно загружать скетчи, но ваш телефон не сможет обнаружить BLE.


    Свободно используйте функционал BLE

    Пройдя все описанные шаги, вы исправите вашу повреждённую плату. Проверьте её работоспособность:

    World

    • $2.65 CC2540 module (RF-BM-S02) from Aliexpress (11.2 x 15.1 x 1.74 mm, onboard USB support)
    • $1.83 Arduino Nano from Aliexpress (to program the chip)
    • $0.92 Panasonic CR1216 lithium 3v battery (12.5 × 1.6 mm), 34 mAh
    • $0.00 Cherry MX Blue keychain (20 x 11 mm) from GeekKeys (actually $3.50 but I got it for free)

    Build or download precompiled firmware from the repository (HIDEmuKbd.hex), use CCLoader and Arduino Nano to flash it.

    Build and upload CCLoader sketch (CCLoader.ino) to Arduino Nano using Arduino IDE.

    Hook up CC2540 to Arduino Nano digital pins D4-D6 as shown in the table (don't forget about 3.3V VCC and GND):

    Signal CC254x CCLoader
    DEBUG_CLOCK P2_1 D6
    DEBUG_DATA P2_2 D5
    RESET RES D4

    Convert firmware.hex to firmware.bin using hex to bin converter.

    Run CCLoader client on PC. E.g. for COM6 and Arduino Nano (Device 0) use:

    CCLoader.exe 6 firmware.bin 0

    That's it, the cc2540 module should accept the new firmware and start working right away (after bluetooth pairing).

    The keyboard button is attached to P0_1 (P01) and GND pins. It sends WinKey keycode, you may modify the code to send any key or a key sequence of your choice. The battery (3V) is attached to VCC and GND pins.

    This keyboard uses modified HIDEmuKbd sample from the CC2540 SDK.

    Copy provided files to the corresponding BLE-CC254x-1.4.0 SDK folders.

    Run IAR, open .eww, hit Make. You may also try precompiled firmware from the repository.

    • Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment

    You got to set number of virtual registers to 8 (in Project - Options - General Options).

    Experimental USB mode

    This section is pure experimental and it's not related to the keyboard above, you may skip it.

    As you know, CC2540 supports USB (CC2541 doesn't), and can be used as USB-HID, USB Serial or USB Mass Storage Device.

    • HIDAdvRemoteDongle sample for the USB HID device.
    • HostTestApp sample for the BTool-compatible serial device.
    • util/UBL sample for the USB Mass Storage device

    To run USB firmware and to detect USB on this module, U+ needs to be pulled to +3.3v via 1.5k resistor.

    Sadly, USB Mass Storage doesn't work (yet) on this RF-BM-S02 module. It sometimes shows removable drive and even shows DEFAULT.CFG file but never opens it. Not sure if it is software or hardware problem (looks like it opens slightly faster on a low speed USB 2.0). The module uses CC254XF256 so memory should be enough. Probably software problem, because USB HID works just fine.

    Official SDK Hardware

    You don't really need official CC2540 SDK hardware (Keyfob and USB Dongle) but you could need schematics and defines.

    World

    • $2.65 CC2540 module (RF-BM-S02) from Aliexpress (11.2 x 15.1 x 1.74 mm, onboard USB support)
    • $1.83 Arduino Nano from Aliexpress (to program the chip)
    • $0.92 Panasonic CR1216 lithium 3v battery (12.5 × 1.6 mm), 34 mAh
    • $0.00 Cherry MX Blue keychain (20 x 11 mm) from GeekKeys (actually $3.50 but I got it for free)

    Build or download precompiled firmware from the repository (HIDEmuKbd.hex), use CCLoader and Arduino Nano to flash it.

    Build and upload CCLoader sketch (CCLoader.ino) to Arduino Nano using Arduino IDE.

    Hook up CC2540 to Arduino Nano digital pins D4-D6 as shown in the table (don't forget about 3.3V VCC and GND):

    Signal CC254x CCLoader RF-BM-S02
    DEBUG_CLOCK P2_1 D6 P21
    DEBUG_DATA P2_2 D5 P22
    RESET RES D4 RES

    Convert firmware.hex to firmware.bin using hex to bin converter.

    Run CCLoader client on PC. E.g. for COM6 and Arduino Nano (Device 0) use:

    CCLoader.exe 6 firmware.bin 0

    That's it, the cc2540 module should accept the new firmware and start working right away (after bluetooth pairing).

    The keyboard button is attached to P0_1 (P01) and GND pins. It sends WinKey keycode, you may modify the code to send any key or a key sequence of your choice. The battery (3V) is attached to VCC and GND pins.

    Arduino Nano as CCLoader

    Arduino Nano as CCLoader

    RF-BM-S02

    RF-BM-S02 Dimensions

    RF-BM-S02 Schematics

    This keyboard uses modified HIDEmuKbd sample from the CC2540 SDK.

    Copy provided files to the corresponding BLE-CC254x-1.4.0 SDK folders.

    Run IAR, open .eww, hit Make. You may also try precompiled firmware from the repository.

    • Error[e16]: Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition. At least 0xe more bytes needed. The problem occurred while processing the segment

    You got to set number of virtual registers to 8 (in Project - Options - General Options).

    Expiremental USB mode

    This section is pure expiremental and it's not related to the keyboard above, you may skip it.

    As you know, CC2540 supports USB (CC2541 doesn't), and can be used as USB-HID, USB Serial or USB Mass Storage Device.

    • HIDAdvRemoteDongle sample for the USB HID device.
    • HostTestApp sample for the BTool-compatible serial device.
    • util/UBL sample for the USB Mass Storage device

    To run USB firmware and to detect USB on this module, U+ needs to be pulled to +3.3v via 1.5k resistor.

    Sadly, USB Mass Storage doesn't work (yet) on this RF-BM-S02 module. It sometimes shows removable drive and even shows DEFAULT.CFG file but never opens it. Not sure if it is software or hardware problem (looks like it opens slightly faster on a low speed USB 2.0). The module uses CC254XF256 so memory should be enough. Probably software problem, because USB HID works just fine.

    Breadboard rig with attached USB

    Breadboard rig with attached USB

    Official SDK Hardware

    You don't really need official CC2540 SDK hardware (Keyfob and USB Dongle) but you could need schematics and defines.


    На Хабре уже встречались статьи о том, как подружить ZigBee устройства различных производителей с системами управления умным домом, без использования фирменных хабов, вроде Xiaomi Gateway. Однако, инструкции для homebridge, я не нашел не только на Хабре, но и на других просторах интернета. Поэтому хочу поделиться опытом добавления ZigBee устройств в homebridge. Огромную благодарность надо выразить создателю ресурса zigbee2mqtt.io, там уже расписаны способы прошивки модема CC2531 и подключения к таким системам управления умным домом как Home Assistant, Domoticz и Majordomo. Статья рассчитана на пользователей, у которых уже установлен и настроен homebridge.


    Все действия в статье будут проводиться со следующим набором оборудования:

    • Raspberry Pi 3 B+ (OS Raspbian) (Прошитый)
    • Устройства Xiaomi (wireless switch, temperature & humidity sensor. )
    • MacBook Pro (OSX 10.14)

    Схематично всю цепочку работы можно изобразить так:


    Теперь по порядку.

    После прошивки модема необходимо установить MQTT брокер (если еще не установлен).

    Я использую Mosquitto, устанавливается так:


    Более подробную инструкцию по настройке можно посмотреть тут.

    Теперь необходимо установить сервис zigbee2mqtt, который взаимодействует с модемом CC2531 и передает данные в Mosquitto:


    Для того чтобы запускать zigbee2mqtt как сервис, необходимо создать файл:
    /etc/systemd/system/zigbee2mqtt.service

    Если у вас уже был установлен MQTT брокер то прописать правильные параметры подключения к нему нужно в файле:


    Запускаем сервис и добавляем его в автозапуск:

    Если все настроено правильно должны увидеть такие строки:

    Можно приступать к интеграции с homebridge. На ресурсе zigbee2mqtt.io есть список поддерживаемых устройств и инструкции по созданию пары. Для примера рассмотрим добавление Xiaomi Wireless Switch.


    Для просмотра событий в Mosquitto воспользуемся программой MQTT Explorer. Запускаем, вводим адрес MQTT сервера, в моем случае он расположен по адресу 192.168.1.104 . Если все установлено правильно, то в дереве увидим ветку zigbee2mqtt. Переходим в нее. Теперь на Xiaomi Wireless Switch зажимаем кнопку Reset до появления мигания диода (около 5 секунд). Примерно через 10 секунд в ветке zigbee2mqtt мы увидим наше устройство и данные которое оно передает.

    Если этого не происходит, то после появления мигания диода, попробуйте однократно нажимать Reset с периодичностью в секунду. Должно получиться так:


    Поле Click содержит тип нажатия, их может быть пять:
    Click, double click, triple click, long, long_release

    Данные получать научились, теперь добавим Xiaomi Wireless Switch в homebrdige. Для взаимодействия с MQTT воспользуемся модулем homebridge-mqttthing. Устанавливается так же, как и другие:


    Модуль поддерживает большое количество классов устройств начиная с выключателей и заканчивая термостатами. Для Xiaomi Wireless Switch больше всего подходит класс StatelessProgramableSwitch . Для добавления нужно знать Topic (0x00158d00022c85ea) и названия команд. Получается вот такой конфиг:


    По аналогии я добавил:

    датчик температуры и влажности, датчик касания, датчик присутствия и выключатель.

    Раньше я использовал модуль homebridge-mi-aqara, который добавляет ZigBee устройства, взаимодействуя с Xiaomi Gateway. При отказе от Gateway уменьшилось время отклика устройств, вдобавок я избавился от устройства которое сидит на моем WiFi и постоянно лезет в интернет.

    Дополнение 07.11.2020 спасибо за @dalamber_sign, если у кого то есть подобные проблемы, возможно поможет:

    Читайте также: