Главная > @ Проекты, STM8 > Программный USB на STM8 (Часть 2)

Программный USB на STM8 (Часть 2)

Продолжаем описание программного USB на базе микроконтроллеров STM8 (первая часть читать).

Сегодня расскажу о коде приемника и о первом включении устройства:

image

Передача данных

В процессе “подключения” устройства к ПК пришлось поправить код передатчика, теперь в подпрограмму передается адрес (указатель) на массив данных.


Прием данных

К сожалению на текущий момент не удалось на лету  и вырезать  незначащие биты, реализовано только декодирование NRZI.

При приеме так же используются обе линии, это позволяет декодировать NRZI буквально двумя командами.

Вот краткий алгоритм работы приемника (декодера):

2014-02-22-Блок-схема-алгоритма-приема

Использование тестового сигнала избыточно, да и проверку можно делать по другому, например декодирование и проверка конца пакета, может быть выполнено вот так:

srl		a
xor		a,(y)
tnz		(y)
jreq	L_End_Rx

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

Важная часть в декодировании захват сигналов всегда в одно и тоже время.

К сожалению у STM8 команды могут выполнятся длительное время от 1 до 6 тактов, для устранения этого недостатка пришлось использовать один таймер.

По первому фронту сигнала запускается таймер 1, после вхождения в обработчик прерывания считывается счетный регистр и выполняется переход в перед на кол-во циклов (комманд nop).

Таким образом получается, что чем больше задержка на вход в прерывания тем дальше переход по коду.

Данный подход позволяет “удерживать” точку захвата в пределах одного такта микроконтроллера.

Это пожалуй ключевой момент, без него не возможно обеспечить начала захвата сигнала в одно и тоже время.

Вот как это выглядит на ассемблере:

_usb_rx:

	ldw		x, #L_Delay_Begin	; адрес начала таблицы задержек
	addw	x, 21086			; + смещение (значение таймера)
	cpw		x, #L_Delay_End		; проверка выхода за границу таблицы (защита!)
	jruge	L_Error
	jp		(x)					; переход по таблице задержек

L_Error:

	iret ; аврийный выход

L_Delay_Begin:
	nop
	nop
	nop
	nop
	nop
	nop

 

Прошу извинить за столь сумбурное описание реализации.

Из протокола я реализовал чтение дескриптора и то, не полностью.

Описывать его не буду, так как сам плохо понимаю, что там происходит Улыбка

Записал небольшой видеоролик с  подключением тестового устройства к ПК:

 


Исходный код

Скачать [2014-02-STM8S-USB.zip]

Внимание!!! Код СЫРОЙ, без оформления и тщательной проверки.

Код собран компилятором Cosmic версии 4.3.7, к сожалению IAR-ом не пользуюсь.

Код можете использовать без ограничений, одна только просьба ссылаться на данный сайт, ну и указывать автора, т.е. меня Улыбка

Будут вопросы пишите, форма обратной связи в меню сайта (см. выше).


Categories: @ Проекты, STM8 Tags: , ,

Версия для печати Версия для печати
  1. Денис
    26 Февраль 2014 в 04:46 | #1

    Добрый день! Подскажите а можно ли шить мк stm8 Jlink’ом 8(segger)?

  2. Виталий
    26 Февраль 2014 в 21:59 | #2

    А блок-схемма алгоритма в какой то программе специальной нарисована? Знаю, можно и в Ворде и в Пеинте, но ищу простую и лаконичную программу для изображения алгоритмов.

  3. ZiB
    27 Февраль 2014 в 10:40 | #3

    @Виталий
    sPlan — простой очень простой редактор.

  4. ZiB
    27 Февраль 2014 в 10:40 | #4

    @Денис
    Не пользовался, не знаю.

  5. 28 Февраль 2014 в 16:27 | #5

    Отправь письмо на hackaday.com о том, что низкий уровень уже пашет и нет времени на дальнеёшее развитие, больше вероятности будет, что кто-то подхватит проект. Там аудитория пошире и люди поадекватнее.

  6. ZiB
    1 Март 2014 в 22:13 | #6

    @Angel5a
    У меня с английским туго, но что-то непонятное написал им :) Спасибо.

  7. 11 Март 2014 в 02:39 | #7

    Затея очень классная. Если получится то это получается ЮСБтоКОМ обойдётся всего в 10-12рублей =).
    Никто не вкурсе — исходники для VUSB для атмеловских мк бесплатны для коммерческого использования?

    Ещё интересней как китайцы смотрят на такое..

  8. ZiB
    11 Март 2014 в 09:19 | #8

    @ULHEDER
    Ни как не пойму почему считают, что мой код основан на V-USB?
    В моем коде нет ни капли от их кода, всё написано с нуля.

  9. vermicelli
    11 Май 2014 в 00:02 | #9

    Hi sir, I am interested in your STM8-VUSB, but use STVP and Cosmic Cosmic build the code [2014-02-STM8S-USB.zip] make my trouble……It’s does’nt work
    I wanna make a HID device, your code is very helpful, can you give me your whole project, so I can find what I have done something wrong, my email is stewvermicelli@gmail.com

    THANK YOU VERY MUCH

  10. ZiB
    11 Май 2014 в 08:50 | #10

    @vermicelli
    Good afternoon, the project has already been published in full.
    I do not use stvd. Replied to your e-mail.

  11. wang
    20 Май 2014 в 18:30 | #11

    Hi sir, I am interested in your STM8-,I use ST Visual Programmer Download 2014-02-STM8S-USB—target—target.s19 in stm8s003f3 .It’s does’nt work !
    please help me ,
    thanks!
    my email :349259818@qq.com

  12. ZiB
    20 Май 2014 в 18:58 | #12

    @wang
    Hi, сheck the following:
    1) MCU is work at 3.3V (AFR0 need programed)
    2) PC7 – «D+ green line»
    3) PC6 – «D- white line» + 1,5 kOm pull up to +3.3V

    how to turn on the device:
    1) you must be connected to the usb controller
    2) turn on the device

  13. wang
    26 Июнь 2014 в 22:58 | #13

    Hi my friend, I Download You Code ,I test 10 sets of computer.but Only one can identify. Why? Please help me,Thank you very much!

  14. ZiB
    26 Июнь 2014 в 23:03 | #14

    @wang
    Good day!
    The problem stems from the fact that some controllers issue while connecting custom impulses that disrupts the logic of the program.
    I do not know much English.
    I have tried to explain above what could be the problem.
    Look here’s the link, it may help you.
    https://github.com/wlianmin/stm8_usb

  1. Пока что нет уведомлений.