Перейти к содержанию
    

Коллеги, удалось ли кому-нибудь запустить 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 не совпадает.

DS2_20236117948.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полноценно ещё не получилось, т.к. не всё понятно с таймингами, но с CRC есть полное понимание. См. пример от WCH - FPGA_16bit_HSPI.zip

Если вкратце, то используется CRC-16/USB согласно https://crccalc.com/

image.thumb.png.2a6580cfbc74bead414322d653a84e0e.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо.

С CRC разобрался.

У меня ещё пара вопросов по сигналам HTREQ/HTRDY.

1. Правильно ли я понимаю, что HTRDY служит только для подтверждения со стороны slave начала передачи и что нельзя приостанавливать передачу опуская HTRDY в ноль когда приемный FIFO почти переполнился?

2. Правильно ли я понимаю, что master отслеживает окончание приема со стороны slave по переходу HTRDY из 1 в 0 после того как HTREQ перешёл в 0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 минут назад, BSACPLD сказал:

1. Правильно ли я понимаю, что HTRDY служит только для подтверждения со стороны slave начала передачи и что нельзя приостанавливать передачу опуская HTRDY в ноль когда приемный FIFO почти переполнился?

Да, т.к. он асинхронный и используется только для хэндшейка в начале передачи.

14 минут назад, BSACPLD сказал:

2. Правильно ли я понимаю, что master отслеживает окончание приема со стороны slave по переходу HTRDY из 1 в 0 после того как HTREQ перешёл в 0?

Нет, мастер сигнализирует конец передачи переводом HTREQ и HTVLD из 1 в 0, а слейв в ответ обязан убрать HTRDY. Слейв - это просто приемник и передачей не управляет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, makc said:

Нет, мастер сигнализирует конец передачи переводом HTREQ и HTVLD из 1 в 0, а слейв в ответ обязан убрать HTRDY. Слейв - это просто приемник и передачей не управляет.

Я имел ввиду, что slave не может мгновенно опустить HTRDY в 0 после того как HTREQ и HTVLD перйдут в 0, если до того как slave успеет опустить HTRDY в 0 master снова выставит HTREQ получится неоднозначная ситуация с готовностью slave к приёму - либо он готов, либо просто не успел убрать HTRDY.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, BSACPLD сказал:

либо он готов, либо просто не успел убрать HTRDY.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, makc said:

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

А сколько максимум тактов может быть?

Это программируемая задержка или ровно 1 такт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, BSACPLD сказал:

А сколько максимум тактов может быть?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем пока результат следующий.

Сделал 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 новый пакет пока старый ещё не успел отправиться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, BSACPLD сказал:

Можно ли указать адрес приемного буфера HSPI для DMA USB3.0 непосредственно перед отправкой пакета в Endpoint чтобы не тратить время на копирование данных из буфера HSPI в буфер Endpoint, или адреса буферов Endpoint можно настраивать только во время начальной инициализации?

Думаю, что можно. Там регистры адресов передачи по DMA не привязаны к фазе инициализации.

6 часов назад, BSACPLD сказал:

Как при этом корректно организовать Flow-Control чтобы не пытаться отправить в Endpoint новый пакет пока старый ещё не успел отправиться?

Отследить флаги состояния endpoint, которые недокументированы. 😞

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понимаю в чем проблема с флагом RB_HSPI_NUM_MIS... 

В ILA вижу что пакеты отправляются корректно, но в CH569W выставляется данный флаг при приёме всех пакетов кроме самого первого и принятые данные смещены по адресам ровно на 4 байта (размер User Header).

У Вас нет рабочего примера приёма пакетов по HSPI?

Примеры от WCH судя по всему не рабочие... 

Во всяком случае для USB3.0 в них была куча ошибок и пришлось переписывать довольно большой кусок кода... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 блок. 😞

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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?

Запросы на официальную почту с сайта просто игнорируются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибок CRC нет?

4 минуты назад, BSACPLD сказал:

А через кого общались с техподдержкой WCH?

Напрямую через форму на сайте.

4 минуты назад, BSACPLD сказал:

Запросы на официальную почту с сайта просто игнорируются.

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

Мне отвечал image.png.9c3d82204b009b5695b9638ce5c3a417.png и в копии были image.png.a6c828323954f46485a03d15316bad21.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 все же есть - просто не сразу появляются...

Но при этом в приемном буфере не мусор, а заголовок + пакет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...