Работаем с USB стеком nRF24LU1+. Часть 1

от автора

Данная статья описывает работу у USB стеком модуля nRF24LU1+. В первой части небольшое введение, установка софта и SDK, Hello World.
Во второй части рассмотрим инициализацию, энумерацию, поддержку WinUSB и обмен данных с хостом. Предполагается что читатель имеет первоначальное понятие о USB. Если нет, то советую ознакомится с отличным мануалом.


Свои чипы я заказал на ebay. В комплекте были 2 модуля и SPI программатор. Сразу ложка дегтя для тех кто заказывает такой же комплект. В разъеме программирования на самом модуле отсутствует линия reset. Без него ISP программирование не работает. Пришлось аккуратно подпаивать.

В принципе, чипы можно программировать через встроенный бутлоадер (и даже написать свой). Так же есть куча SPI флешеров на основе ftdi, arduino и прочего. Процесс программирования аналогичен чипу nrf24le1.

Чип nRF24LU1+ представляет из себя:

  • трансивер nRF24l01+ работающий на 2.4ГГц
  • full speed USB 2.0 контроллер
  • 8 битный мироконтроллер с ядром Intel MCS 51
  • 16 или 32 кб флеша

Внутреннее устройство чипа:

Из особенностей стоит упомянуть что быстрой оперативки всего 256 байт (IRAM). Остальные 2 кб (SRAM) расположены на внешней шине, соответственно доступ к ним медленнее. Так же присутствует модуль шифрования.

Настройка Keil, nRFgo SDK и Hello World

Все разработка будет вестись в среде Keil и nRFgo SDK. Скачиваем, устанавливаем (тыц, тыц).
Пару слов об организации проекта. Я создал вот такую структуру. 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("\r\nHello World!\r\n"); 		delay_ms(1000);    } } 

Так же к проекту нужно добавить два файла:

hal\nrf24lu1p\hal_uart.c hal\hal_delay.c 

Читатель уже, наверное, понял что мы подключаем исходники для именно для нашего чипа
Что бы все корректно собралось нужно нужно поставить несколько галочек и прописать Include Path для компилятора.
Правый клин по проекту — Options.

Во кладке Output ставим галочку Create HEX file.
Далее во вкладке С51 прописываем Include

..\..\hal;..\..\hal\nrf24lu1p;..\..\compiler\c51;..\..\compiler\common; 

Собираем проект. Получившийся hex файл заливаем программатором в контроллер. В моем случае китайцы прислали вот такую софтину. Сам программатор определяется как HID устройство, драйверов не требует. Перед программированием чип надо обязательно стереть.
Софтину можно скачать здесь.

Если все сделали правильно, в UART раз в секунду будут сыпаться Hello World.

Продолжение в следующий части. Будет рассмотрена инициализация USB, энумерация, поддержка WinUSB и обмен с хостом.

ссылка на оригинал статьи http://geektimes.ru/post/260142/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *