Jump to content

    
Sign in to follow this  
TrampX

Изучение модуля USB

Recommended Posts

Хих стандартное заблуждение)... скрывая наработки вы как раз ничего не приобретаете. Кроме вас есть еще много людей кто тоже поднял USB на этих процессорах. А вот раскрыв их вы можете получить, ревизию вашего кода, большее число тестировщиков, почет уважение, сообщество программистов, имя и так далее... Да прямых денег вам никто не даст, а косвенно может много сохранить.

К примеру превратить 1-3 дня на подъем + недельная отладка, в просто 1 день, но это не ваш случай...

Я не настаиваю на своей правоте. Наработки я не то чтобы скрываю, просто не афиширую. Было пару случаев, когда ими воспользовались сторонние люди, но ничего кроме реакции "круто, оно работает" ничего не получил. Чтобы довести код до совершенства нужна как минимум соответствующая квалификация: от "молодых" толку мало, а у "старичков" нет времени и желания ковыряться в чужом коде, когда уже есть или свои наработки, или стандартные библиотеки. Имя мне делает не то как я пишу код, а то что готовое изделие работает, обладает соответствующим функционалом, при определенной стоимости и времени разработки. Это с одной стороны. С другой стороны: все люди разные,у каждого свое мировоззрение. Не редко приходилось сталкиваться с разработчиками, более авторитетными чем я, и склонять к своему мнению - хм, не тут-то было. Тряся кодом ничего не докажешь, нужно время чтобы заметить разницу в подходах к программированию в целом. Начинать нужно со студентов. Года два назад помогал с одной разработкой родному ВУЗу - провел несколько семинаров для аспирантов. Приглашали вести курс на постоянной основе, но времени к сожалению нет.

По поводу раскрытия: мои реализации USB CDC и HID приведены несколькими постами выше. Ничего оригинального в них нет. Хотя замахнулся на USB HID "свисток" с управлением входами-выходами, показанием температуры, возможностью подключения монето- и купюроприемников, приема ИК-кодов, проигрывания музыки через бузер (по нотам и длительностям), пробрасыванием RS-232, функциями сторожевого таймера, расчета MD5 для выполнения функций взаимной авторизации как ПК, так и USB-устройства (типа аппаратный ключ). Это для платежных систем, музыкальных автоматов. Работает без драйверов, можно втыкать-вытыкать устройство на горячую - демо-ПО все отслеживает и не падает. Вот наработки - вопросов от сообщества пока нет))

Share this post


Link to post
Share on other sites
Хих стандартное заблуждение)... скрывая наработки вы как раз ничего не приобретаете. Кроме вас есть еще много людей кто тоже поднял USB на этих процессорах. А вот раскрыв их вы можете получить, ревизию вашего кода, большее число тестировщиков, почет уважение, сообщество программистов, имя и так далее... Да прямых денег вам никто не даст, а косвенно может много сохранить.

К примеру превратить 1-3 дня на подъем + недельная отладка, в просто 1 день, но это не ваш случай...

Это стандартное заблуждение :rolleyes:

 

Наверно любой широкодоступный код годится для надежной работы, но требует оптимизации. И тот, кто потратил время на доводку такого кода (Free RTOS, scmRTOS, Fat FS и т.п.) вряд ли будет его раскрывать, если зарабатывает на этом. Оригинальность она ведь тоже денег стоит.

 

Кстати, а кто это будет бесплатно тестировать, трассироать и утсранять баги в коде, хотелось бы услышать? Скорее всего народ сделает так, как написать выше, т.е. соптимизирует для себя и всё. Конечно, я сужу исключительно по себе, но кто так не делает? :rolleyes:

Share this post


Link to post
Share on other sites
По поводу раскрытия: мои реализации USB CDC и HID приведены несколькими постами выше...

В примере USB_HID не хватает файла stm32f10x_map.h

Share this post


Link to post
Share on other sites
Во вложенном архиве.

Спасибо!

Сейчас Keil считает ошибкой следующую конструкцию:

typedef struct sPORT
{
    BYTE    report;                // Report = 3 (in/out), size = 33 + 1
    union
    {
        struct
        {
            BYTE    length;                // 0..32
            BYTE    data[32];
        };
        struct
        {
            BYTE    command;
            WORD    baud;
            BYTE    parity;
            BYTE    stop;
        };
    };
} sPORT;

Сначала пишет предупреждения на внутренние структуры:

type.h(45): warning: #40-D: expected an identifier

А потом уже ошибку на объединение:

type.h(53): error: #618: struct or union declares no named members

 

Это поправил, добавил имен. Но еще не находится WORKLED_bit

Share this post


Link to post
Share on other sites
Это поправил, добавил имен. Но еще не находится WORKLED_bit

Думаю, что в define.h должно быть так:

#define     WORKLED_bit                        PER_BIT_ADDR(GPIOA_ODR, WORKLED)

Share this post


Link to post
Share on other sites

Теперь осталось последнее. Кейл создает скаттер-файл следующего вида.

LR_IROM1 0x08000000 0x00080000  {  ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00010000  {; RW data
   .ANY (+RW +ZI)
  }
}

И выдает ошибку

USB_CDC.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.

Это связано с тем, что в проекте стартап написан на C, и секции RESET нет. Что бы такого здесь подправить? Можно свой ассемблерный стартап создать, но интересно именно на C испытать...

Еще не нахожу, где же настраиваются частоты, PLL. То, что в Кейле вызывается в первую очередь после сброса (функция SystemInit()).

Share this post


Link to post
Share on other sites
Что бы такого здесь подправить. Можно свой ассемблерный стартап создать, но интересно именно на C испытать...

В кейле я не силен...

От стартапа ничего особенного не надо: инициализировать данные и передать управление в main().

Можно и на asm.

А какая цель запуска именно этих исходников? Если я правильно помню начало разговора, то идея была в том,

что в некоторых случаях (например, USB для STM32) проще написать самому, чем использовать библиотеку.

Обсуждаемые исходники всего лишь демонстрация этого утверждения.

Думаю, под кейлом запустить еще надо постараться (хотя первая версия была именно под кейл).

Стартап и размещения для линкера это только часть неприятностей (другие неприятности связаны с использованием

особенностей gcc, например, те же анонимные структуры и объединения; а еще и обработчики прерываний надо по

особому оформлять). Тут я видел два пути: либо запускать под gcc, либо скопировать частично исходник в свой (ваш) проект.

 

Share this post


Link to post
Share on other sites
А какая цель запуска именно этих исходников? Если я правильно помню начало разговора, то идея была в том,

что в некоторых случаях (например, USB для STM32) проще написать самому, чем использовать библиотеку.

Цель та же - понять USB в STM32. От примеров из библиотеки голова кругом идет. Хочу пройтись по функциям, минимально необходимым.

Share this post


Link to post
Share on other sites
Цель та же - понять USB в STM32. От примеров из библиотеки голова кругом идет. Хочу пройтись по функциям, минимально необходимым.

В таком случае, правильнее было бы запустить проект по второму варианту (с вашим стартапом и размещением для линкера).

Как написать стартап на С в кейл, по моему, заслуживает отдельной темы))... Хотя для Cortex-M3 все пишется достаточно

просто на ЯВУ С. Правда, я не сторонник настраивать PLL и другую периферию до вызова main().

Share this post


Link to post
Share on other sites

Доброго дня.

Недавно тоже начал разбираться с USB-HID (STM32F4-DISCOVERY).

До этого, ООЧЕНЬ давно, работал с контроллерами, так что небольшое представление о них имею. С этой платой начал только разбираться, поэтому в его регистрах пока не очень.

По поводу ST-библиотеки - ужас+вынос_мозга, потыкал-повключал примеры и все, даже в голову мысли не пускаю об её использовании в своих проектах.

То, что я изобретаю велосипед (да еще и не оптимальной конструкции) - это все понятно. Но то, что это будет МОЙ велосипед - это и есть радость разработчика.

adnega, спасибо за исходники, скачал, начал разбирать их.

ViKo, у Вас получилось запустить на stm32f4?

 

Есть вопрос по файлу stm32f10x_map.h

/* System Control Space memory map */
#define SCS_BASE              ((u32)0xE000E000)

Откуда взялся адрес 0xE000E000? (в референс мануале на stm32f10xx не нашел такого адреса)

 

И ещё:

/*------------------------ SystemTick ----------------------------------------*/
typedef struct
{
  vu32 CTRL;
  vu32 LOAD;
  vu32 VAL;
  vuc32 CALIB;
} SysTick_TypeDef;

- этих регистров не нашел в доке, вообще про SysTick там пара фраз.

 

Подскажите, где искать, если кто знает.

Share this post


Link to post
Share on other sites
...ООЧЕНЬ давно, работал с контроллерами

Контроллеры из "ООЧЕНЬ давно" похожи на современные как велосипед на трактор... Вам стоит начать "от печки" - почитать про Cortex-ы вообще. Там, например, Вы сразу найдете ответы на заданные Вами вопросы.

Я, кстати, тоже "велосипедист", CMSIS не использую, но ST-шные примеры, ввиду многократно обсуждавшегося качества их доки - элемент необходимый. Мне, например, они помогли написать простенькое и устойчивое Bulk-устройство, читаемое (мною) гораздо легче, чем код от ST.

Share this post


Link to post
Share on other sites

Знаете, ответы в виде "читайте доку", "курите мануал" - это или от незнания, или от жадности.

Если бы я нашел ответы на свои опросы, то и не задавал бы их вообще.

Share this post


Link to post
Share on other sites
...ответы в виде "читайте доку", "курите мануал" - это или от незнания, или от жадности...

Как знаете... Хотите код посмотреть - без проблем. Только если "ST-библиотеки - ужас+вынос_мозга", то вряд ли на этом этапе это поможет Вам построить свой велосипед...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this