- PVSM.RU - https://www.pvsm.ru -
Данная статья описывает работу у USB стеком модуля nRF24LU1+. В первой части небольшое введение, установка софта и SDK, Hello World.
Во второй части рассмотрим инициализацию, энумерацию, поддержку WinUSB и обмен данных с хостом. Предполагается что читатель имеет первоначальное понятие о USB. Если нет, то советую ознакомится с отличным мануалом [1].
Свои чипы я заказал на ebay [2]. В комплекте были 2 модуля и SPI программатор. Сразу ложка дегтя для тех кто заказывает такой же комплект. В разъеме программирования на самом модуле отсутствует линия reset. Без него ISP программирование не работает. Пришлось аккуратно подпаивать.
В принципе, чипы можно программировать через встроенный бутлоадер (и даже написать свой). Так же есть куча SPI флешеров на основе ftdi [3], arduino [4] и прочего. Процесс программирования аналогичен чипу nrf24le1.
Чип nRF24LU1+ [5] представляет из себя:
Внутреннее устройство чипа:
Из особенностей стоит упомянуть что быстрой оперативки всего 256 байт (IRAM). Остальные 2 кб (SRAM) расположены на внешней шине, соответственно доступ к ним медленнее. Так же присутствует модуль шифрования.
Все разработка будет вестись в среде Keil и nRFgo SDK. Скачиваем, устанавливаем (тыц [6], тыц [7]).
Пару слов об организации проекта. Я создал вот такую структуру. Compiler, HAL и LIB скопировал из nRFgo SDK. В папке Projects будут лежать уже непостредственно проеты
├───compiler
│ ├───c51
│ ├───common
│ └───icc8051
├───hal
│ ├───nrf24l01p
│ ├───nrf24le1
│ └───nrf24lu1p
├───lib
│ ├───adns7530
│ ├───assertions
│ ├───crypt
│ ├───display
│ ├───eeprom
│ ├───eeprom255
│ └───rf_test
└───projects
└───HelloWolrd
Заходим в Keil. Project — New uVision Prject. Выбираем каталог с проектом, вводим название проекта. Далее выбираем чип как на картинке, со всем соглашаемся.
Далее, добавляем новый исходник в проект (правый клик по Source Group 1 — Add New Iteam)
Первая программа, бесконечно печатаем в UART «Hello World!»
#include <stdio.h>
#include "nrf24lu1p.h"
#include "hal_uart.h"
#include "hal_delay.h"
char putchar(char c)
{
hal_uart_putchar(c);
return c;
}
void putstring(char *s)
{
while(*s != 0)
putchar(*s++);
}
void main(void)
{
P0DIR = 0x00;
hal_uart_init(UART_BAUD_57K6);
EA = 1;
for(;;)
{
putstring("rnHello World!rn");
delay_ms(1000);
}
}
Так же к проекту нужно добавить два файла:
halnrf24lu1phal_uart.c
halhal_delay.c
Читатель уже, наверное, понял что мы подключаем исходники для именно для нашего чипа
Что бы все корректно собралось нужно нужно поставить несколько галочек и прописать Include Path для компилятора.
Правый клин по проекту — Options.
Во кладке Output ставим галочку Create HEX file.
Далее во вкладке С51 прописываем Include
....hal;....halnrf24lu1p;....compilerc51;....compilercommon;
Собираем проект. Получившийся hex файл заливаем программатором в контроллер. В моем случае китайцы прислали вот такую софтину. Сам программатор определяется как HID устройство, драйверов не требует. Перед программированием чип надо обязательно стереть.
Софтину можно скачать здесь [8].
Если все сделали правильно, в UART раз в секунду будут сыпаться Hello World.
Продолжение в следующий части. Будет рассмотрена инициализация USB, энумерация, поддержка WinUSB и обмен с хостом.
Вторая часть [9]
Автор: covsh
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/usb/96093
Ссылки в тексте:
[1] мануалом: http://www.usbmadesimple.co.uk/
[2] ebay: http://www.ebay.com/itm/nrf24lu1p-nrf24lu1-USB-Dongles-2-4G-Wireless-Module-PC-USB-Flash-Programmer-/231389787409
[3] ftdi: https://github.com/jdelfes/nrf24le1_flasher
[4] arduino: https://github.com/DeanCording/nRF24LE1_Programmer
[5] nRF24LU1+: https://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24LU1P
[6] тыц: http://www.keil.com/dd/chip/4727.htm
[7] тыц: https://www.nordicsemi.com/kor/node_176/2.4GHz-RF/nRFgo-SDK
[8] здесь: http://www.fileshare.ro/e31832821
[9] Вторая часть: http://geektimes.ru/post/260210/
[10] Источник: http://geektimes.ru/post/260142/
Нажмите здесь для печати.