Статьи

USB с платой Freescale FRDM-K22F

FRDM-K22F  является одним из последних членов семей борта Свободы: 512 КБайт флэша, 128 KB RAM и обычные компоненты доски свободы на нем. К сожалению, Freescale решила не заполнять разъем платы micro-SD на плате, поэтому с этой точки зрения  FRDM-K64F  является более выгодным . Но у платы есть USB, так что это делает его еще интересным. И это то, о чем этот пост: добавление USB к плате FRDM-K22F за несколько минут …

Доска Freescale FRDM-K22F

Доска Freescale FRDM-K22F

Обновление программного обеспечения

В этой статье я использую Kinetis Design Studio с компонентами Processor Expert.

Компоненты

Компоненты

Вам нужна «Экспертная поддержка процессора для Kinetis K22F / KV31F @ 120 / 100MHz Service Pack». Вы получаете это обновление с помощью меню «Справка»> «Установить новое программное обеспечение» и используете

http://freescale.com/lgfiles/updates/Eclipse/KDS

обновить сайт:

Установленный K22F Service Pack

Установленный K22F Service Pack

Кроме того, вам нужны последние компоненты McuOnEclipse Processor Expert от SourceForge ( https://sourceforge.net/projects/mcuoneclipse/files/PEx%20Components/ ), см. « Выпуски McuOnEclipse на SourceForge ».

Создание проекта

Создайте новый проект для Processor Expert в Eclipse и для  устройства MK22FN512xxx12 :

Новый проект для MK22FN512

Новый проект для MK22FN512

Вы  * не *  выберите опцию Kinetis SDK, только выбрать процессор Эксперт:

Процессор Эксперт Проект

Процессор Эксперт Проект

Конфигурация часов

K22 может работать до 120 МГц. Я настраиваю его на максимальную скорость, аналогичную K64F (см. « FRDM-K64F на максимальной скорости 120 МГц »). У меня включен внешний кристалл 8 МГц:

Включен внешний кристалл 8 МГц

Включен внешний кристалл 8 МГц

MCG установлен в PEE с выходной частотой ФАПЧ 120 МГц

ПИ с тактовой частотой 120 МГц

ПИ с тактовой частотой 120 МГц

Системные часы установлены на максимально возможные значения:

Системные часы

Системные часы

Конфигурация USB

Добавьте компонент FSL_USB_Stack в проект. Я использую здесь класс USB CDC Device. Настройте его для использования Init_USB_OTG_VAR0 и включения класса USB CDC Device:

Конфигурация USB-компонентов

Конфигурация USB-компонентов

Включите синхронизирующий вентиль и пусть он использует часы PLL / FLL с выходом делителя часов в качестве источника синхронизации. Чтобы построить необходимые тактовые частоты дискретизации USB 48 МГц из тактовых импульсов PLL 120 МГц, используйте множитель 2 с делителем 5:

Настройка USB Init

Настройка USB Init

Finally, select the K22FN120 as CPU in the USB CDC sub component:

Выбран процессор USB

USB CPU Selected

That’s it!

Application Code

What is missing is now the application code. It can be very simple as this:

#include <stdio.h>
static uint8_t cdc_buffer[USB1_DATA_BUFF_SIZE];
static uint8_t in_buffer[USB1_DATA_BUFF_SIZE];
 
static void CDC_Run(void) {
  int i, cnt = 0;
  uint32_t val = 0;
  unsigned char buf[16];
 
  for(;;) {
    while(CDC1_App_Task(cdc_buffer, sizeof(cdc_buffer))==ERR_BUSOFF) {
      /* device not enumerated */
      LED1_Neg(); LED2_Off();
      WAIT1_Waitms(10);
    }
    LED1_Off(); LED2_Neg();
    if (CDC1_GetCharsInRxBuf()!=0) {
      i = 0;
      while(   i<sizeof(in_buffer)-1
            && CDC1_GetChar(&in_buffer[i])==ERR_OK
           )
      {
        i++;
      }
      in_buffer[i] = '\0';
      (void)CDC1_SendString((unsigned char*)"echo: ");
      (void)CDC1_SendString(in_buffer);
      UTIL1_strcpy(buf, sizeof(buf), (unsigned char*)"val: ");
      UTIL1_strcatNum32u(buf, sizeof(buf), val);
      UTIL1_strcat(buf, sizeof(buf), (unsigned char*)"\r\n");
      (void)CDC1_SendString(buf);
      val++;
    } else {
      WAIT1_Waitms(10);
      cnt++;
      if ((cnt%1024)==0) { /* from time to time, write some text */
        (void)CDC1_SendString((unsigned char*)"Type some text and it will echo.\r\n");
        CDC1_SendBlock((unsigned char*)"hello?\r\n", sizeof("hello?\r\n")-1);
      }
    }
  }
}

Summary

The K22F is the latest addition to the list of supported USB microcontroller in the FSL_USB_Stack component. The example project featuring USB CDC is available onGitHub.

Happy USBing!