Внутренняя и внешняя калибровка
Фотодиод не выдаёт дБм, а термистор — °C. Где-то сырое показание датчика должно превратиться в инженерную величину — и SFF-8472 позволяет делать это либо внутри модуля, либо на хосте, по константам, которые предоставляет модуль. Ошибка здесь — обычная причина, по которой коммутатор показывает абсурдные значения DDM для модуля, который работает идеально.
Два режима калибровки
| Режим | Объявляется | Кто пересчитывает | Что содержат байты мониторов |
|---|---|---|---|
| Внутренняя | A0h байт 92, бит 5 | микроконтроллер модуля | итоговые значения в стандартных единицах (1/256 °C, 100 мкВ, 2 мкА, 0,1 мкВт) |
| Внешняя | A0h байт 92, бит 4 | хост | сырые отсчёты АЦП; хост применяет константы из A2h 56–95 |
Почти все современные модули калиброваны внутренне. Модули с внешней калибровкой — старые или удешевлённые конструкции; их значения читаются мусором на хостах, которые пропускают пересчёт.
Константы внешней калибровки — A2h байты 56–95
| Байты | Константа | Формат | К чему |
|---|---|---|---|
| 56–75 | Rx_PWR(4) … Rx_PWR(0) | пять чисел IEEE-754 одинарной точности | мощность Rx (полином 4-й степени) |
| 76–77 | Tx_I slope | беззнаковое 8.8 с фикс. точкой | ток смещения Tx |
| 78–79 | Tx_I offset | знаковое 16-бит | ток смещения Tx |
| 80–81 | Tx_PWR slope | беззнаковое 8.8 | мощность Tx |
| 82–83 | Tx_PWR offset | знаковое 16-бит | мощность Tx |
| 84–85 | T slope | беззнаковое 8.8 | температура |
| 86–87 | T offset | знаковое 16-бит | температура |
| 88–89 | V slope | беззнаковое 8.8 | Vcc |
| 90–91 | V offset | знаковое 16-бит | Vcc |
| 92–94 | резерв | — | — |
| 95 | CC_DMI | контрольная сумма байтов 0–94 | — |
Формулы пересчёта
Rx_PWR (мкВт) = Rx4·raw⁴ + Rx3·raw³ + Rx2·raw² + Rx1·raw + Rx0
Tx_I (мкА) = Tx_I_slope · raw + Tx_I_offset
Tx_PWR (0,1 мкВт) = Tx_PWR_slope · raw + Tx_PWR_offset
T (1/256 °C) = T_slope · raw + T_offset
V (100 мкВ) = V_slope · raw + V_offset
Для внутренне калиброванного модуля константы игнорируются; многие вендоры всё равно заполняют их единичными значениями (slope 1,0, offset 0, полином Rx 0,0,0,1,0), чтобы хост, применяющий их вопреки всему, получил верный ответ.
Средняя мощность и OMA
Бит 3 байта 92 A0h говорит, как выражена мощность Rx: средняя мощность (1) или OMA — амплитуда оптической модуляции (0). Почти все модули сообщают среднюю; OMA встречается у части многомодовой Ethernet-оптики, где стандарт задаёт чувствительность именно так. Сравнение значения OMA со спецификацией чувствительности в средней мощности вводит в заблуждение до ~3 дБ.
Симптомы проблемы с калибровкой
| Что видите | Вероятная причина |
|---|---|
| Температура 0 °C или −128 °C, Vcc 0,00 В | хост читает сырые отсчёты внешне калиброванного модуля без пересчёта |
| Rx невозможно высокий (+10 дБм) или всегда −40 дБм | предположен неверный режим калибровки или обнулены константы |
| Значения дико различаются на двух моделях коммутаторов с одним модулем | один хост уважает байт 92, другой считает калибровку внутренней |
| Tx одинаков у всех модулей партии | не калибровка — константный Tx (Уровни DDM) |
В CodingBox
CodingBox читает байт 92, применяет константы внешней калибровки, когда модуль их объявляет, и показывает и сырые, и пересчитанные значения, так что модуль, который коммутатор показывает неверно, можно оценить на столе. Блок констант 56–95 редактируем в редакторе EEPROM с автоматическим пересчётом CC_DMI — полезно для восстановления модулей с затёртой областью калибровки.