210
| Цитата |
|---|
| Правильно ли я понял что стандарт USB в режиме Asynchronous аналогичен передачи по S/PDIF с дополнительным реклоком от приемника к передатчику? Ну то есть приемник передает синхру на передатчик... |
Не совсем так. USB – не соединение "точка-точка", а шина, на которой может теоретически висеть до 127 устройств, поэтому давать им навязывать интерфейсу свой клок нереально.
Вот ещё цитата, на этот раз из Device Class Definition for Audio Devices version 2.0:
3.11.1 Asynchronous
Asynchronous isochronous audio endpoints produce or consume data at a rate that is locked either to a clock external to the USB or to a free-running internal clock. These endpoints cannot be synchronized to start of frame (SOF) or to any other clock in the USB domain.
Пропуская бОльшую часть подробностей, можно сказать, что на USB асинхронный режим заключается в следующем: пусть у нас на диске лежит wav с частотой дискретизации 48 кГц, а через USB подключен ЦАП, который тактируется от локального генератора с частотой (номинальной) те же 48 кГц. Когда мы жмём Play, аудиоданные из файла начинают передаваться по USB пакетами по 48 отсчетов на канал, пакеты летят каждую миллисекунду, но это время отсчитывается не по часам ЦАПа, а по часам компа. В аудио-девайсе эти отсчеты не подаются сразу на ЦАП, а попадают в буфер, он же FIFO. Когда буфер оказывается заполнен примерно наполовину, данные начинают читаться из буфера в ЦАП с частотой, которая, напоминаю, задаётся локальным генератором. Поскольку часы ЦАПа и USB являются асинхронными, количество данных в FIFO будет медленно расти либо убывать. Если интерфейс односторонний, это приведет к тому, что со временем буфер переполнится или окажется пустым. Чтобы этого не произошло, аудио-девайс передаёт в обратную сторону информацию о степени заполнения FIFO, и комп в очередном пакете передаёт не 48 отсчётов, а 47 или наоборот 49.