Соорудил приёмопередатчик FibreChannel 1Gb на Cyclone IV GX + какой-то узкоглазый оптический конвертер (Optronic).
Задача -- принимать кадры Class 3.
Реализовал машину из FC-FS-2, раздел 7 FC_Port state machine: битовая синхронизация успешно, link protocol поднимается до AC (active state).
Затем внешнее устройство посылает некий фрейм Class 3 (SOFi3-EOFt), на что я отвечаю R_RDY (если я правильно понял раздел 17.5 buffer-to-buffer control), в остальных случая Idle.
И вот тут случается непонятная мне вещь: через некоторое время (предполагаю, что на отправителе происходит E_D_TOV) линия переходит в Link Reset и переинициализируется. Затем всё повторяется.
Собственно вопросы:
1. Что минимально необходимо для реализации приёмной ноды FC для фреймов Class 3?
2. Нужно ли обрабатывать BB_SCr и BB_SCs?
3. Когда "правильно" отправлять R_RDY? После приёма SOF, в течении фрейма, после приёма EOF? В документации никакой конкретики нет, а точнее я сделал вывод что всё равно когда.
Цитата
17.5.2 Buffer-to-buffer management rules
e) Recognition of SOFc1, SOFx2, or SOFx3 shall be responded to by a transmission of an R_RDY when the
buffer becomes available, regardless of whether the frame is valid, invalid, or discarded.
17.6 Alternate buffer-to-buffer Credit management
c) The receiving FC_Port shall transmit at least one R_RDY, representing the number of additional receive
buffers available, before, during, or after the reception of frames;
e) Recognition of SOFc1, SOFx2, or SOFx3 shall be responded to by a transmission of an R_RDY when the
buffer becomes available, regardless of whether the frame is valid, invalid, or discarded.
17.6 Alternate buffer-to-buffer Credit management
c) The receiving FC_Port shall transmit at least one R_RDY, representing the number of additional receive
buffers available, before, during, or after the reception of frames;
Всё ещё усугубляется тем, что железки-сендера на столе для отладки у меня нет (а если и будет, то залезть в неё и посмотреть почему происходит reset link не могу). Есть какой-то HBA в PCI-порту, который в принципе делает всё что надо, но, насколько я понимаю, для поднятия линка ему требуется нечто большее чем просто отвечать R_RDY на его фреймы Class 3.
Буду рад любому указанию на возможные грабли и/или толковую документацию.