ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
87333 Топик полностью
Hexxx (23.04.2007 13:44, просмотров: 1) ответил Hexxx на Помогите осилить SL811
Отвечает Александр Друзь! Payload - это масимальный объем информации, который можно переслать/прочитать за 1 раз. Регистр EP0Counter - возвращает сколько байт было недочитано. Причем, число которое оттуда возвращается - signed! То есть если вы прочитали EP0Counter, а там 0xFC, это означает что не прочитано -4 байта. То есть вы захотели прочитать 0xC байт а девайс вам ответил 0x10-ю байтами. Получатеся, что еще 4 байта не было вычитано, хотя они есть. А если вы захотели прочитать 0xC, а девайс вам вернул 0x8 байт, то EP0Counter будет = 4. Т.е. вы запросили на 4 байта больше чем ответил девайс. Как узнать размер Payload для EP0? Payload обычно можно узнать запросив DEVICE descriptor. Но как его узнать если девайс говорит NAK на запрос DEVICE descriptor'a? Экспериментальным путем. Даже если девайс не поддерживает запрос Device descriptor'a, он поддерживает запрос на CONFIGURATION descriptor в любом случае. Обычно тут девайс выдает большой объем информации. Пробуйте читать ответ и смотрите сколько байт будет недочитано. Начните с 8 и увеличивайте кратно 8: 8, 16, 24, 32, 64. При одном из значений Payload, EP0Counter будет == 0. Это значение и есть payload. Фишка с чтением ответов девайса, длина которых > payload. Девайс действительно не даст вам прочесть данных больше чем payload, поэтому надо будет сделать еще одно чтение. Но! Не пытайтесь дебажить код многократного чтения. Там дается очень короткий промежуток времени для дочитывания остальной части ответа. Когда пытаешься дебажить - первая часть читается нормально, а остальные так и не вычитываются. Пример в EZ811 DK реально работоспособный. P.S. Я хуею дорогая редакция... Стока народу и никто на простые вопросы так и не ответил...