История изменений
Исправление 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 зачем-то переключается, например.