Команда Data Block (D)

Описание

(см. описание формата команд здесь)

Назначение:Передаёт один 128-байтный блок файла прошивки в NetLoader
Формат команды:Dnndd...d, где

nn - номер блока (двоичный формат, два байта, сначала старший байт);

dd...d - 128 байт данных файла.

Возможные ответы:Ann, Cnn, Snn, Onn, Inn, Fnn, где nn - номер следующего ожидаемого блока данных (двоичный формат, два байта, сначала старший байт)

Подробности

Команда Data Block передаёт блок из 128 байт файла прикладной прошивки. Весь файл прикладной прошивки загружается несколькими командами Data Block, при этом NetLoader ожидает, что размер файла прошивки будет кратен 128-байтным блокам.

Блоки данных должны отправляться строго по порядку, то есть первый блок (блок 0) должен содержать первые 128 байт файла прошивки, блок 1 - следующие 128 байт и т. д. Поскольку обмен с NetLoader основан на UDP-командах, а UDP-пакеты могут теряться, каждый блок данных отправляется со своим номером. Так NetLoader может убедиться, что все полученные блоки идут в правильной последовательности.

Поле nn в теле команды содержит номер блока. Номер блока передаётся в двоичном виде. Поскольку номера блоков могут превышать 255, для номера используются два байта. Старший байт идёт первым, поэтому, например, чтобы обозначить блок № 300, первые два байта должны быть 01H 2CH. Нумерация блоков начинается с 0.

За двумя байтами номера блока следуют 128 байт данных файла прошивки. Данные также передаются в двоичном виде, то есть часть файла прошивки «вырезается» и прикрепляется к команде.

Как и все остальные команды, команда Data Block возвращает соответствующий код состояния ответа. Разница в том, что за каждым кодом состояния следует номер следующего ожидаемого блока данных. Номер следующего блока присутствует даже в ответах, сообщающих, что команда не была выполнена успешно. В этом случае номер следующего ожидаемого блока просто не меняется (не увеличивается). Если команда выполнена успешно, поле nn в ответе «указывает» на следующий блок данных, который нужно отправить. Например, если поле nn в команде было 300 (01H 2CH) и команда выполнена успешно, в ответе поле nn будет равно 301 (01H 2DH). Если команда завершилась неудачей, поле nn в ответе останется 300 (01H 2CH).

Код состояния ответа OK (A) возвращается, если блок данных успешно записан или если команда Data Block передала блок данных, который уже был записан. То есть если NetLoader ожидает блок с номером 10, а сетевой хост передаёт блок 5, NetLoader ответит кодом A и отбросит этот блок данных.

Код состояния ошибки Error (C) возвращается, если общая длина полей nn и dd...d в команде не равна 130 байтам.

Код ответа Sequence Error (S) возвращается, если NetLoader получает блок данных с полем nn больше ожидаемого (например, блок 7, когда ожидался блок 6).

Код ответа Out-of-range (O) возвращается, если общий размер файла прошивки, полученного NetLoader, превышает размер, определённый в начале загрузки файла. Информация об общем размере файла содержится в самом файле прошивки (в блоке 1). Например, если ожидаемый размер файла составляет 40064 байта, общее число блоков данных должно быть 40064/128=313. Следовательно, диапазон ожидаемых номеров блоков данных - 0...312. NetLoader вернёт код O, если получит блок данных с номером больше 312.

Код ответа Invalid Data (I) возвращается, если NetLoader определяет, что данные файла, отправленные сетевым хостом, некорректны. Это может быть сгенерировано только для блоков данных 0 и 1. Эти блоки содержат служебную информацию (например, общий размер файла - см. выше), которую NetLoader проверяет, чтобы убедиться, что загружаемый файл прошивки приемлем.

Код ответа Failed (F) возвращается, если NetLoader не может записать блок данных во FLASH-память DS.

Рекомендуем сетевому хосту отправить команду Start Over (Q) перед началом загрузки файла командами Data Block.