BSACPLD 15 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба Коллеги, удалось ли кому-нибудь запустить HSPI на CH569W? У меня никак не получается правильно посчитать CRC. Режим 8 бит, согласно документации полином для 8 бит должен быть 0x8005 (x^16 + x^15 + x^2 + 1). На реальном устройстве для тестовой последовательности 0x01 0x00 0x00 0xC8 0x06 0x00 0xEC 0x00 0x00 0x02 0x0E 0x00 на выходе получается CRC равная 0xDD62 (см. скриншот с лог. анализатора). В CRC калькуляторе совсем другое значение: 0x99EC. http://www.sunshine2k.de/coding/javascript/crc/crc_js.html Пробовал все варианты галочек Input reflected, Result reflected, пробовал менять значения Initial Value на 0xFFFF, 0x0000 - все равно результат в калькуляторе и с выхода CH569W не совпадает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба Полноценно ещё не получилось, т.к. не всё понятно с таймингами, но с CRC есть полное понимание. См. пример от WCH - FPGA_16bit_HSPI.zip Если вкратце, то используется CRC-16/USB согласно https://crccalc.com/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба Спасибо. С CRC разобрался. У меня ещё пара вопросов по сигналам HTREQ/HTRDY. 1. Правильно ли я понимаю, что HTRDY служит только для подтверждения со стороны slave начала передачи и что нельзя приостанавливать передачу опуская HTRDY в ноль когда приемный FIFO почти переполнился? 2. Правильно ли я понимаю, что master отслеживает окончание приема со стороны slave по переходу HTRDY из 1 в 0 после того как HTREQ перешёл в 0? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 11 минут назад, BSACPLD сказал: 1. Правильно ли я понимаю, что HTRDY служит только для подтверждения со стороны slave начала передачи и что нельзя приостанавливать передачу опуская HTRDY в ноль когда приемный FIFO почти переполнился? Да, т.к. он асинхронный и используется только для хэндшейка в начале передачи. 14 минут назад, BSACPLD сказал: 2. Правильно ли я понимаю, что master отслеживает окончание приема со стороны slave по переходу HTRDY из 1 в 0 после того как HTREQ перешёл в 0? Нет, мастер сигнализирует конец передачи переводом HTREQ и HTVLD из 1 в 0, а слейв в ответ обязан убрать HTRDY. Слейв - это просто приемник и передачей не управляет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 1 minute ago, makc said: Нет, мастер сигнализирует конец передачи переводом HTREQ и HTVLD из 1 в 0, а слейв в ответ обязан убрать HTRDY. Слейв - это просто приемник и передачей не управляет. Я имел ввиду, что slave не может мгновенно опустить HTRDY в 0 после того как HTREQ и HTVLD перйдут в 0, если до того как slave успеет опустить HTRDY в 0 master снова выставит HTREQ получится неоднозначная ситуация с готовностью slave к приёму - либо он готов, либо просто не успел убрать HTRDY. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 3 минуты назад, BSACPLD сказал: либо он готов, либо просто не успел убрать HTRDY. Такая возможность есть и поэтому у мастера после завершения передачи должен быть внутренний холостой цикл ожидания освобождения шины. Посмотрите картинку в даташите, там хорошо видна задержка HTRDY на один такт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 29 minutes ago, makc said: Такая возможность есть и поэтому у мастера после завершения передачи должен быть внутренний холостой цикл ожидания освобождения шины. Посмотрите картинку в даташите, там хорошо видна задержка HTRDY на один такт. А сколько максимум тактов может быть? Это программируемая задержка или ровно 1 такт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба 4 минуты назад, BSACPLD сказал: А сколько максимум тактов может быть? Такой информации нет. Думаю, что там один такт, но для страховки можно добавить ожидание перехода в ноль. Для красоты можно добавить синхронизатор на входе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 4 июня, 2023 Опубликовано 4 июня, 2023 · Жалоба В общем пока результат следующий. Сделал loopback через FPGA, содержимое пакетов проверяю через ILA. 1. CH569W->FPGA все ОК. 2. FPGA->CH569W пакеты отсылаются корректно, но CH569W принимает только первый пакет, при приеме следующего пакета выставляется флаг ошибки RB_HSPI_NUM_MIS. Не совсем понимаю, что это за не совпадение sequence number - делал распечатку через PRINT, после приема RB_HSPI_RX_NUM увеличивается на 1 как и должен... И ещё один момент. Мне нужно пробрасывать пакеты с HSPI в два различных Endpoint USB3.0. В какой Endpoint кидать пакет можно определить только после приема пакета по его заголовку. Можно ли указать адрес приемного буфера HSPI для DMA USB3.0 непосредственно перед отправкой пакета в Endpoint чтобы не тратить время на копирование данных из буфера HSPI в буфер Endpoint, или адреса буферов Endpoint можно настраивать только во время начальной инициализации? Как при этом корректно организовать Flow-Control чтобы не пытаться отправить в Endpoint новый пакет пока старый ещё не успел отправиться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 6 часов назад, BSACPLD сказал: Можно ли указать адрес приемного буфера HSPI для DMA USB3.0 непосредственно перед отправкой пакета в Endpoint чтобы не тратить время на копирование данных из буфера HSPI в буфер Endpoint, или адреса буферов Endpoint можно настраивать только во время начальной инициализации? Думаю, что можно. Там регистры адресов передачи по DMA не привязаны к фазе инициализации. 6 часов назад, BSACPLD сказал: Как при этом корректно организовать Flow-Control чтобы не пытаться отправить в Endpoint новый пакет пока старый ещё не успел отправиться? Отследить флаги состояния endpoint, которые недокументированы. 😞 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба Не понимаю в чем проблема с флагом RB_HSPI_NUM_MIS... В ILA вижу что пакеты отправляются корректно, но в CH569W выставляется данный флаг при приёме всех пакетов кроме самого первого и принятые данные смещены по адресам ровно на 4 байта (размер User Header). У Вас нет рабочего примера приёма пакетов по HSPI? Примеры от WCH судя по всему не рабочие... Во всяком случае для USB3.0 в них была куча ошибок и пришлось переписывать довольно большой кусок кода... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 1 час назад, BSACPLD сказал: Не понимаю в чем проблема с флагом RB_HSPI_NUM_MIS... Я пока тоже. 🙂 Вы передачу 4 байт заголовка начинаете с какого байта? Другими словами, байт со счётчиком и младшими битами длины передаёте первым или последним? 1 час назад, BSACPLD сказал: В ILA вижу что пакеты отправляются корректно, но в CH569W выставляется данный флаг при приёме всех пакетов кроме самого первого и принятые данные смещены по адресам ровно на 4 байта (размер User Header). Вы проверяли, что RB_HSPI_RX_NUM инкрементируется после первого пакета? В ПЛИС происходит аналогичный инкремент? Мысль такая, что нули всегда совпадают с нулями и если у вас нарушен порядок передачи байт заголовка, то первый пакет будет успешно принят, а вот с остальными начнутся проблемы. 1 час назад, BSACPLD сказал: У Вас нет рабочего примера приёма пакетов по HSPI? Пока нет, но надеюсь на этой неделе он у меня будет. 1 час назад, BSACPLD сказал: Во всяком случае для USB3.0 в них была куча ошибок и пришлось переписывать довольно большой кусок кода... Ошибок там не то чтобы много, а очень много. Точнее это не ошибки, а костыльный подход к разработке, когда нет правильной обработки повторов, таймаутов и т.п. Но они категорически не хотят давать документацию на USB SS блок. 😞 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 10 minutes ago, makc said: Я пока тоже. 🙂 Вы передачу 4 байт заголовка начинаете с какого байта? Другими словами, байт со счётчиком и младшими битами длины передаёте первым или последним? Последним - подсмотрел через ILA при передаче из CH569W в ПЛИС. 10 minutes ago, makc said: Вы проверяли, что RB_HSPI_RX_NUM инкрементируется после первого пакета? В ПЛИС происходит аналогичный инкремент? Мысль такая, что нули всегда совпадают с нулями и если у вас нарушен порядок передачи байт заголовка, то первый пакет будет успешно принят, а вот с остальными начнутся проблемы. Я там loopback сейчас реализовал - все пришедшие байты кладутся в FIFO и отправляются обратно без изменений. И я проверял и через ILA и через регистры - инкрементируются. 10 minutes ago, makc said: Но они категорически не хотят давать документацию на USB SS блок. 😞 А через кого общались с техподдержкой WCH? Запросы на официальную почту с сайта просто игнорируются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 231 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба Ошибок CRC нет? 4 минуты назад, BSACPLD сказал: А через кого общались с техподдержкой WCH? Напрямую через форму на сайте. 4 минуты назад, BSACPLD сказал: Запросы на официальную почту с сайта просто игнорируются. Мне ответили несколько раз, только результат был в итоге нулевой, т.к. они прислали по-другому нерабочие примеры для SS. Мне отвечал и в копии были Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BSACPLD 15 5 июня, 2023 Опубликовано 5 июня, 2023 · Жалоба 5 minutes ago, makc said: Ошибок CRC нет? Нет. Но сейчас словил другой "прикол". Поменял фазу клока HRCLK - ожидаемо появились ошибки CRC. Поменял момент семплирования через бит RB_HSPI_RCK_MOD - ошибки CRC ожидаемо исчезли и также исчезли ошибки RB_HSPI_NUM_MIS при приеме последующих пакетов. Но при этом данные в приемном буфере стабильно смещены на размер заголовка (4 байта). До этого заголовок удалялся в самом первом пакете, а в последующих был мусор. P.S. Капец он глючный... А я ещё в свое время ругался на то, что FX3 глючный 🙂 P.P.S. Ошибки с RB_HSPI_NUM_MIS все же есть - просто не сразу появляются... Но при этом в приемном буфере не мусор, а заголовок + пакет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться