LINUX.ORG.RU

История изменений

Исправление Stanson, (текущая версия) :

Еще в даташите как то мутно написано про использование дабл буфферинга.

В обычном режиме

DTOG ( Data Transmission Syncronization бит ) - индикатор того, какой пакет (DATA0/DATA1) должен быть принят/передан. В double-buffer режиме используется USB peripheral ещё и для того, чтобы понять из какого буфера данные передавать / в какой принимать.

SW_BUF - индикатор того, какой буфер сейчас используется software. В качестве этого бита используется DTOG противоположной направленности. Если endpoint RX - то SW_BUF это DTOG_TX, если TX - то SW_BUF это DTOG_RX. Если софт не успел обработать буфер, то не переключит этот SW_BUF, и USB ответит NAK - типа не готов.

А в изохронном режиме NAK не пошлёшь, так ему пофиг успел софт или нет. И double buffer принудительный. Поэтому оно само дёргает DTS бит c каждым пакетом чтобы писать/читать то один буфер то другой и всё.

Насчёт HAL - не в курсе, не использую его, Может там противоположный DTOG зачем-то переключается, например.

Исправление Stanson, :

Еще в даташите как то мутно написано про использование дабл буфферинга.

В обычном режиме

DTOG ( Data Transmission Syncronization бит ) - индикатор того, какой пакет (DATA0/DATA1) должен быть принят/передан. В double-buffer режиме используется USB peripheral для того, чтобы понять из какого буфера данные передавать / в какой принимать.

SW_BUF - индикатор того, какой буфер сейчас используется software. В качестве этого бита используется DTOG противоположной направленности. Если endpoint RX - то SW_BUF это DTOG_TX, если TX - то SW_BUF это DTOG_RX. Если софт не успел обработать буфер, то не переключит этот SW_BUF, и USB ответит NAK - типа не готов.

А в изохронном режиме NAK не пошлёшь, так ему пофиг успел софт или нет. И double buffer принудительный. Поэтому оно само дёргает DTS бит c каждым пакетом чтобы писать/читать то один буфер то другой и всё.

Насчёт HAL - не в курсе, не использую его, Может там противоположный DTOG зачем-то переключается, например.

Исправление Stanson, :

Еще в даташите как то мутно написано про использование дабл буфферинга.

В обычном режиме

DTOG ( DTS бит ) - индикатор того, какой пакет (DATA0/DATA1) должен быть принят/передан. В double-buffer режиме используется USB peripheral для того, чтобы понять из какого буфера данные передавать / в какой принимать.

SW_BUF - индикатор того, какой буфер сейчас используется software. В качестве этого бита используется DTOG противоположной направленности. Если endpoint RX - то SW_BUF это DTOG_TX, если TX - то SW_BUF это DTOG_RX. Если софт не успел обработать буфер, то не переключит этот SW_BUF, и USB ответит NAK - типа не готов.

А в изохронном режиме NAK не пошлёшь, так ему пофиг успел софт или нет. И double buffer принудительный. Поэтому оно само дёргает DTS бит c каждым пакетом чтобы писать/читать то один буфер то другой и всё.

Насчёт HAL - не в курсе, не использую его, Может там противоположный DTOG зачем-то переключается, например.

Исправление Stanson, :

Еще в даташите как то мутно написано про использование дабл буфферинга.

В обычном режиме

DTOG - DTS бить - индикатор того, какой пакет (DATA0/DATA1) должен быть принят/передан. В double-buffer режиме используется USB peripheral для того, чтобы понять из какого буфера данные передавать / в какой принимать.

SW_BUF - индикатор того, какой буфер сейчас используется software. В качестве этого бита используется DTOG противоположной направленности. Если endpoint RX - то SW_BUF это DTOG_TX, если TX - то SW_BUF это DTOG_RX. Если софт не успел обработать буфер, то не переключит этот SW_BUF, и USB ответит NAK - типа не готов.

А в изохронном режиме NAK не пошлёшь, так ему пофиг успел софт или нет. И double buffer принудительный. Поэтому оно само дёргает DTS бит c каждым пакетом чтобы писать/читать то один буфер то другой и всё.

Насчёт HAL - не в курсе, не использую его, Может там противоположный DTOG зачем-то переключается, например.

Исправление Stanson, :

Еще в даташите как то мутно написано про использование дабл буфферинга.

В обычном режиме

DTOG - индикатор того, какой пакет (DATA0/DATA1) далжен быть принят/передан.

SW_BUF - индикатор того, какой буфер используется software. В качестве этого бита используется DTOG противоположной направленности. Если endpoint RX - то SW_BUF это DTOG_TX, если TX - то SW_BUF это DTOG_RX. Если софт не успел обработать буфер, то не переключит этот SW_BUF, и USB ответит NAK - типа не готов.

А в изохронном режиме NAK не пошлёшь, так ему пофиг успел софт или нет. Оно само дёргает этот DTS бит c каждым пакетом и всё.

Насчёт HAL - не в курсе, не использую его, Может там противоположный DTOG зачем-то переключается, например.

Исходная версия Stanson, :

Еще в даташите как то мутно написано про использование дабл буфферинга.

В обычном режиме

DTOG - индикатор того, какой пакет (DATA0/DATA1) бы принят/передан.

SW_BUF - индикатор того, какой буфер используется software. В качестве этого бита используется DTOG противоположной направленности. Если endpoint RX - то SW_BUF это DTOG_TX, если TX - то SW_BUF это DTOG_RX. Если софт не успел обработать буфер, то не переключит этот SW_BUF, и USB ответит NAK - типа не готов.

А в изохронном режиме NAK не пошлёшь, так ему пофиг успел софт или нет. Оно само дёргает этот DTS бит c каждым пакетом и всё.

Насчёт HAL - не в курсе, не использую его, Может там противоположный DTOG зачем-то переключается, например.