Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: C8051F320 от Sillicon Labs и USB драйвер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Kaplinsky
Тема такая:
Нужно написать драйвер для USB данной микросхемы и организовать BULK Transfer и что бы с этим девайсом можно было работать как с обычным COM-портом.
100% такое кто то делал. Т.е. USB драйвер как виртуальный COM-порт.
Что бы мне заново не изобретать велосипед, подскажите где взять примерчик ?
aal
CP210x по некоторым источникам - это C8051F320 заточенный под USB <-> COM мост. Зайди на ефо.ру. Наверняка в доках найдёшь чтонибудь.
Есть подозрение, что под винды драйвер стандартный будешь использывать от CP210x, а в программе только стартовую инициализацию делать.
Обратись к Konst_777 - работал с C8051F320.
Ну и эти ветки посмотри.
http://forum.electronix.ru/index.php?showtopic=6781
http://forum.electronix.ru/index.php?showt...53&hl=c8051f320
Konst_777
Последующее изложение предполагает, что Вам действительно необходимо использовать контроллер C8051F320, а не мост USB <-> COM.

Под Windows, с контроллером C8051F320 проще "работать" используя USBXpress Development Kit фирмы SiLabs. Kit содержит драйверы для Windows 98SE/Me/2000/Server 2003/XP, а также API для host-а (.DLL) и контроллера (.lib). У SiLabs есть руководство программиста для USBXpress (AN169). Используя USBXpress реально создать работающую систему, даже не зная, что такое USB.

USBXpress не имеет драйвера для Linux. Если желательно иметь одно и то же firmware контроллера и для Windows и для Linux, то можно написать firmware так, что контроллер будет восприниматься операционными системами, как устройство, для которого Вы сможете найти драйверы под обе ОС. Например, как мост USB <-> Ethernet или мост USB <-> COM. При этом следует учитывать, что придется поискать производителя, у которого драйверы виртуального COM порта (VCP) обеспечивают скорость обмена по USB больше 400 Кбайт/сек.
Kaplinsky
USBExpress - это действительно очень удобно, если нужно организовать обмен с железом и нужно писать свое приложение под винду. У меня задача такая что бы стандартные терминальные программы могли работать с моей железкой. Т.е. Драйвер должен делать виртуальный COM порт.

Если, как говорят умные люди, CP2102 это C8051F320 заточеный под бридж USB <-> COM то мне наверное нужна начинка этого CP2102. Т.е. прошивка или примерчик, то что я смогу залить в 320-ы и он будет себя вести как CP2102 и к нему подойдут драйвера от CP2102.
Konst_777
Готового проекта для С8051F320 у меня нет, так как до сих пор мне хватало USBXpress. Если не найдете готовый проект, то могу поучаствовать в его создании.
Kaplinsky
Есть вот какое соображение:
Берем драйвер для CP2102 правим inf таким образом что бы драйвер "подходил" для нашего девайса и пишем прошивку для С8051F320 уже "под этот" драйвер. Кароче "подгоняем" прошивку под драйвер.
Konst_777
Лучше так: в firmware контроллера ставим VID и PID, как для CP210x и обрабатываем все запросы драйвера устройства для CP210x.
Konst_777
И все-таки, учитывая все вышеизложенное Вами, почему бы Вам не использовать любой мост USB <-> COM в связке с любым контроллером, у которого есть последовательный порт? Стоимость такой системы в "железе" может оказаться даже ниже стоимости C8051F320. Или есть особая предрасположенность к данному контроллеру?
Kaplinsky
Аднако не соглашусь с тобой дядька. Посчитай сколько будет стоять например C8051F017 + CP2102 и C8051F320.
320-й дешевле + меньше элементов на плате... удобство и цена. Изделие веть не радиолюбительское и не разовое.
Konst_777
Архив содержит .EXE файлы. Проверьте на вирусы.

Описание в Read_Me.
Kaplinsky
Ну спасиб тебе дядька a14.gif за AN220, AN197 - веть они находятся в Application Notes к CP210x а я все глаза проглядел в App Notes к C8051F320, прям незнаю как благодарить cheers.gif !

А прошивочка (Firmware) где взялась ? Сам писал или тоже генерится как-то ?
Konst_777
Сам писал.
Kaplinsky
Цитата(Konst_777 @ Sep 13 2005, 02:21)
Сам писал.
*

Маладец, какой!

А если в прошивке для работы с USB использовать USBExpress ? У меня что то неполучается. Хотя теоретически должно работать. Кто-то пробовал ?

А то там весь текст на асме ... многа букв, неасилю... blink.gif
Konst_777
После установки SiLabs IDE, в папке C:\SiLabs\MCU\Examples\C8051F32x\USB_Bulk\Firmware находится пример firmware для Bulk пересылок на С. Когда-то я использовал этот пример, чтобы написать свое firmware на ассемблере. Вам предстоит решить обратную задачу. Правда, частично.

Не думаю, что firmware для USBXpress (библиотека USB_API.LIB ) сможет "работать" с драйвером VCP.
Charley
Цитата(Kaplinsky @ Sep 5 2005, 12:58) *
USBExpress - это действительно очень удобно, если нужно организовать обмен с железом и нужно писать свое приложение под винду. У меня задача такая что бы стандартные терминальные программы могли работать с моей железкой. Т.е. Драйвер должен делать виртуальный COM порт.

Если, как говорят умные люди, CP2102 это C8051F320 заточеный под бридж USB <-> COM то мне наверное нужна начинка этого CP2102. Т.е. прошивка или примерчик, то что я смогу залить в 320-ы и он будет себя вести как CP2102 и к нему подойдут драйвера от CP2102.


По моему я такую же идею встречал на специализированном форуме на сайте www.silabs.ru
Kaplinsky
Цитата(Charley @ Nov 13 2005, 21:06) *
По моему я такую же идею встречал на специализированном форуме на сайте www.silabs.ru


А где именно ? Как тема называется непривспомнишь ? А то я там все обсмотрел !!!
one_man_show
Если усраивает самому написать Virtual Com Port, то смотрите поиском по сети, найдете массу VCL и ActiveX, правда первыми встречаются платные, но, кто ищет, тот всегда найдет smile.gif
Angelborn
Освежу тему (уже почти 10 лет ей) biggrin.gif

У кого-то есть раскрытая библиотека USBX_F320_1.LIB? Я так понял силаб её засекретил? Ну сейчас вроде 15ый год уже, к чему эти секреты ихние?
alexunder
Цитата(Angelborn @ Feb 5 2015, 17:51) *
Освежу тему (уже почти 10 лет ей) biggrin.gif
У кого-то есть раскрытая библиотека USBX_F320_1.LIB? Я так понял силаб её засекретил? Ну сейчас вроде 15ый год уже, к чему эти секреты ихние?


Думаю, силабс держит патентец на нее. Там сидит функционал для USB-контроллера, зачем она Вам?
Angelborn
Цитата(alexunder @ Feb 5 2015, 17:46) *
Думаю, силабс держит патентец на нее. Там сидит функционал для USB-контроллера, зачем она Вам?


Ну это всёравно что держать патент на первый паровой автомобиль начала века )
А зачем она мне... пишу на асме потихоньку, хотелось бы видеть набор команд для этих функций.

USB_Clock_Start()
USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,US
B_PwAttributes,USB_bcdDevice);
USB_Int_Enable();

Возможно есть примеры на асме без этой мудреной библиотеки, для работы с USB.

Harbinger
Файл, прикреплённый к 10-му сообщению в этой теме.
Angelborn
Цитата(Harbinger @ Feb 6 2015, 09:00) *
Файл, прикреплённый к 10-му сообщению в этой теме.


Да, раньше смотрел, но ничего не понял там crying.gif
alexunder
Цитата(Angelborn @ Feb 5 2015, 21:25) *
Ну это всёравно что держать патент на первый паровой автомобиль начала века )

Бывает и такое sm.gif

Цитата(Angelborn @ Feb 5 2015, 21:25) *
А зачем она мне... пишу на асме потихоньку, хотелось бы видеть набор команд для этих функций.
USB_Clock_Start()
USB_Init(USB_VID,USB_PID,USB_MfrStr,USB_ProductStr,USB_SerialStr,USB_MaxPower,US
B_PwAttributes,USB_bcdDevice);
USB_Int_Enable();
Возможно есть примеры на асме без этой мудреной библиотеки, для работы с USB.

Я все-таки не понимаю Вас или Вы не понимаете что есть USBX_F320_1.LIB. Эта "мудрёная" библиотека содержит код высокоуровневых функций типа USB_Clock_Start(), USB_Init() и пр. для работы с USB. На мой взгляд, она исполнена весьма неплохо: инициализация, отправка данных, и пр.. До проекта с F321 я много времени провёл с Cypress FX2 и должен сказать, что реализация USB у Silabs весьма неплохая хоть это и Full Speed. Зачем Вам ее исходники? Оптимизировать? Сомневаюсь, что Вы сделаете лучше чем Silabs, да и потом, Вам потребуется глубокое знание самоё USB и принципов работы подсистемы USB силабсовых МК - где это-то взять?.
Если же Вы желаете просто попрактиковаться программированию на ассемблере для 51, то есть же масса вариантов: напишите поддержку файловой системы для какой-нибудь SPI флеш на ассемблере biggrin.gif
Angelborn
Цитата(alexunder @ Feb 6 2015, 10:05) *
Я все-таки не понимаю Вас или Вы не понимаете что есть USBX_F320_1.LIB. Эта "мудрёная" библиотека содержит код высокоуровневых функций типа USB_Clock_Start(), USB_Init() и пр. для работы с USB. На мой взгляд, она исполнена весьма неплохо: инициализация, отправка данных, и пр.. До проекта с F321 я много времени провёл с Cypress FX2 и должен сказать, что реализация USB у Silabs весьма неплохая хоть это и Full Speed. Зачем Вам ее исходники? Оптимизировать? Сомневаюсь, что Вы сделаете лучше чем Silabs, да и потом, Вам потребуется глубокое знание самоё USB и принципов работы подсистемы USB силабсовых МК - где это-то взять?.
Если же Вы желаете просто попрактиковаться программированию на ассемблере для 51, то есть же масса вариантов: напишите поддержку файловой системы для какой-нибудь SPI флеш на ассемблере biggrin.gif


Наверное всё-таки низкоуровневых )
Нет, вовсе не хочу там что-либо менять, понятное дело что они это всем своим штатом разрабатывали.
Просто нужно написать простую программу для отправки параметров в/из компа по шине USB. Пишу на асме. Вот как туда вставить эти подпрограммы... Что они расходуют, какие ресурсы - хотя бы понимание...
alexunder
Цитата(Angelborn @ Feb 6 2015, 11:37) *
Наверное всё-таки низкоуровневых )

я имел ввиду, что функции типа USB_Init, Block_Read и пр. являются высокоуровневыми по отношению к оперированию приемопередатчиком USB, пакетами, токенами и пр. Ну, не важно, в самомо деле.

Цитата(Angelborn @ Feb 6 2015, 11:37) *
Просто нужно написать простую программу для отправки параметров в/из компа по шине USB. Пишу на асме. Вот как туда вставить эти подпрограммы... Что они расходуют, какие ресурсы - хотя бы понимание...

Отлично! Нет ничего проще, чем сделать это с помощью обсуждаемой библиотеки! Вы работаете в Keil? Ну так подключите библиотеку к проекту. Там в пакете USBXpress должны быть и примеры для популярных сред типа Keil и IAR. И там же была информация в PDF-файле о ресурсах, требуемых для библиотеки.
Затем в Вашем ассемблерном проекте вызывайте внешние функции с помощью lcall (только не забудьте, что передача переменных идет через регистры Rx)

Код
;****************************************************************
; Объявления внешних функций из библиотеки Silabs USB_API
; Не забудьте прицепить файл USBX_F320_1.LIB к проекту!
;****************************************************************
extrn number (Flash_Size_L,Flash_Size_H)
extrn code (USB_Clock_Start)
extrn code (_USB_Init)
extrn xdata (?_USB_Init?BYTE)
extrn code (USB_Int_Enable)
extrn code (USB_Int_Disable)
extrn code (Get_Interrupt_Source)
extrn code (USB_Disable)
extrn code (_Block_Read)
extrn code (_Block_Write)


Вызов _BlockRead() Из обработчика прерывания от USB:
Код
MessageDispatcher:
; Получена структура сообщения от хоста. Диспатчим ее
; Считываем структуру из USB_Buffer
    mov      r3, #0x01
    mov      r2, #HIGH(USB_Buffer)
    mov      r1, #LOW(USB_Buffer)
    mov      r5, #0x0E
    mov      r4, #0x00
    lcall    _Block_Read


Angelborn
О, спасибо. Уже начинаю понимать. В кейле конечно работаю. Вот только не совсем понял ссылки на регистры у вас в примере R1-R5. Получается что сама процедура общается с библиотекой на уровне асма как раз через регистры? А где можно почитать про эти сообщения?
В пдф AN169_USBXpress_Programmers_Guide.pdf я не нашёл ничего конкретного, только описания этих подпрограмм.
alexunder
Цитата(Angelborn @ Feb 6 2015, 12:58) *
А где можно почитать про эти сообщения?

Нигде. Напишите код с вызовом нужной функции, к примеру Block_Write(), на Си и откомпилируйте с выставленной настройкой генерации ассемблерного листинга (где-то в кейле есть, может даже по-умолчанию стоит), то в нем после компиляции увидите как происходит вызов библиотечной функции и передача параметров в функцию на ассемблере.
Только тут надо быть очень внимательным, ибо вероятность понаделать ошибок из-за невнимательности на ассемблере гораздо выше чем на Си. Посему настоятельно рекомендую писать программы для работы с USB (да и вообще более менее сложные вещи) именно на Си. Кейл имеет хороший компилятор.

Цитата(Angelborn @ Feb 6 2015, 12:58) *
В пдф AN169_USBXpress_Programmers_Guide.pdf я не нашёл ничего конкретного, только описания этих подпрограмм.

Было где-то, про модель памяти и указания какие регистры задействованы и не подлежат изменению после вызова USB_init(). Не помню точно (3 года уже прошло), в пакете должен быть мануал, не верю что в новых версиях он стал хуже.
Angelborn
Цитата(alexunder @ Feb 6 2015, 14:41) *
Нигде. Напишите код с вызовом нужной функции, к примеру Block_Write(), на Си и откомпилируйте с выставленной настройкой генерации ассемблерного листинга (где-то в кейле есть, может даже по-умолчанию стоит), то в нем после компиляции увидите как происходит вызов библиотечной функции и передача параметров в функцию на ассемблере.
Только тут надо быть очень внимательным, ибо вероятность понаделать ошибок из-за невнимательности на ассемблере гораздо выше чем на Си. Посему настоятельно рекомендую писать программы для работы с USB (да и вообще более менее сложные вещи) именно на Си. Кейл имеет хороший компилятор.

Т.е. вы предлагает просто дизассемблировать отдельные функции? Вариант.
Наверное нужно на си переходить. Ассемблер хорош для небольших программ, хотя на нём пишу давно.

Цитата
Было где-то, про модель памяти и указания какие регистры задействованы и не подлежат изменению после вызова USB_init(). Не помню точно (3 года уже прошло), в пакете должен быть мануал, не верю что в новых версиях он стал хуже.

Почитаю, спасибо.
alexunder
Цитата(Angelborn @ Feb 6 2015, 14:13) *
Т.е. вы предлагает просто дизассемблировать отдельные функции? Вариант.

Нет! Я говорю об ассемблерном листинге, который генерируется любым компилятором Си (если выставлена соответствующая опция). Это будет точный ассемблерный код Вашей программы, написанной на Си. Чтоб потестировать, создайте пустой Си-проект в кейле для 8051, например и напишите что-то типа
void main
{
a = 5;
b = 6;
_BlockRead();
}
скомпилируйте и посмотрите листинг, оттуда станет ясно, что "находится внутри сишной программы". Это не позволит Вам заглянуть в библиотеку Silabs, т.к. она уже откомпилирована и является сборником бинарного кода (который можно дизассемблировать, только вот зачем?), но дасть понять как работает компилятор Си. Впрочем, думаю все это есть в описании к C51 от Keil, но я никогда его не читал...

jcxz
Цитата(Angelborn @ Feb 6 2015, 17:58) *
Получается что сама процедура общается с библиотекой на уровне асма как раз через регистры? А где можно почитать про эти сообщения?
В пдф AN169_USBXpress_Programmers_Guide.pdf я не нашёл ничего конкретного, только описания этих подпрограмм.

Порядок вызова функций, передачи им и возврата от них аргументов называется "Соглашения вызова" или "Calling conventions". И искать их описание следует в описании компилятора.
alexunder
Цитата(jcxz @ Feb 7 2015, 18:55) *
Порядок вызова функций, передачи им и возврата от них аргументов называется "Соглашения вызова" или "Calling conventions". И искать их описание следует в описании компилятора.

Вот! Спасибо!
Angelborn
Всем спасибо за ответы!
Сделал проект в Кейле, добавил туда все файлы из проекта Силабс, который называется TestPanel, там где можно поморгать светодиодом и получить данные АЦП по шине USB. Откомпилировал (ошибок 0, но 19 предупреждений почему-то).
В кейле поставил галочку "внедрять asm код в LST"
Так вот... действительно все команды асма стали видны.
Но какая-то неувязочка. Если сравнивать бинарно прошивку напрямую из камня и вот эти команды asm из lst, то видно много различий. Не пойму вследствии чего это так...
pvasil404
Ребята, помогите написать\подобрать драйвер для железяки на базе silabs 8051f320. Изрыл весь инет, максимум чего добился - корректной работы на winxp32 и win764. Но проблема в том что работать это все должно на win7-32! на этой системе никак не встает, никакие танцы с бубном не помогают

Не за просто так, само собой!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.