Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

Подробное описание регистров, команд и кодов ошибок шлюза UART-to-I2C/SPI/1W RH-0010

  1. 1. Регистры.
    1. 1.1 Регистры общего назначения и GPIO.
    2. 1.2 Регистры интерфейсов.
      1. 1.2.1 Регистры интерфейса I2C.
      2. 1.2.2 Регистры интерфейса SPI.
      3. 1.2.3 Регистры интерфейса 1-Wire.
  2. 2. Команды.
    1. 2.1 Команды общего назначения и GPIO.

      1. 2.1.1 Расширенные команды общего назначения.

    2. 2.2 Команды интерфейсов.

      1. 2.2.1 Команды интерфейса I2C.
      2. 2.2.2 Команды интерфейса SPI.
      3. 2.2.3 Команды интерфейса 1-Wire.
  3. 3. Коды ошибок.

Список регистров:

COMMON_FLAGS, IO_FLAGS, ADD_FLAGS, ERROR

FLAGS_I2C, BTS_I2C, RDB_I2C

CONFIG_SPI, PAKET_SIZE, FLAGS_SPI, REG0-REG7

FLAGS_1W, BTS_1W, RDB_1W, RST1_1W-RST3_1W, SB1_1W-SB3_1W, RB1_1W-RB3_1W

Список команд:

ResetDevice, InterfaceChoiceI2C, IntefaceChoiceSPI, InterfaceChoice1W, ReadError, SaveToEPROM, ReadFromEPROM, EnableReports, DisableReports, EnableAutoLoad, DisableAutoLoad, DDRBSetup, DDRBRead, PORTBSetup, PORTBRead, DDRCSetup, DDRCRead, PORTCSetup, PORTCRead, DDRDSetup, DDRDRead, PORTDSetup, PORTDRead, PINBRead, PINCRead, PINDRead, ReadCommonConfig, ReadVersion, SetIOG, DoExtendedCommand, ReadSerialNumber

EnterProgMode_HVAVR, GivePagelPosPulse_HVAVR, GiveXTALPosPulse_HVAVR, GiveWRNegPulse_HVAVR, ExecuteVppFirstAlg_PIC, ExecuteVddFirstAlg_PIC, ExecuteVppLastAlg_PIC, ExecuteVddLastAlg_PIC, GiveWR250NegPulse_HVAVR, GiveWR20NegPulse_HVAVR, SetPort_PG, ClearPort_PG, SetDDR_PG, ClearDDR_PG, LoadIOGTime, ReadIOGTime

SendStart_I2C, SendStop_I2C, SendByte_I2C, ReadByteA_I2C, ReadByte_I2C, ClearCS_I2C, SetCS_I2C, ReadCS_I2C

LoadConfig_SPI, ReadConfig_SPI, LoadPaketSize_SPI, ReadPaketSize_SPI, LoadPaket_SPI, ReadPaket_SPI, StartChange_SPI, ClearSS_SPI, SetSS_SPI, ReadSS_SPI, ReadSignPaket_SPI, FastReadPaket_SPI, FastSendPaket_SPI

SendReset_1W, SendByte_1W, ReadByte_1W, SendBit_1W, ReadBit_1W, LoadTimes_1W, ReadTimes_1W, SendByteSTRPU_1W, ClearSTRPU_1W, Get580usPulse_1W, Get110msPulse_1W

1. Регистры

1.1 Регистры общего назначения и GPIO

COMMON_FLAGS:

[7..6 — not used, 5 — USE_ADD, 4 — AUTOLOAD_EN, 3 — REPORTS_EN, 2 — 1W_SEL, 1 — SPI_SEL, 0 — I2C_SEL]

— USE_ADD — если флаг установлен, значит в регистре ADD_FLAGS есть установленные флаги

— AUTOLOAD_EN — если конфигурация была сохранена в EPROM с этим установленным флагом, то при включении шлюза он автоматически загрузится с этой конфигурацией

— REPORTS_EN — если этот флаг установлен, то шлюз будет посылать в uart значения, возвращаемые командами в регистр ERROR

— 1W_SEL — установленный флаг означает, что шлюз настроен для работы через интерфейс 1-Wire. При этом регистры интерфейсов I2C/SPI будут недоступны, а команды для этих интерфейсов будут генерировать код ошибки «Unknown Command» — неизвестная команда

— SPI_SEL — установленный флаг означает, что шлюз настроен для работы через интерфейс SPI. При этом регистры интерфейсов I2C/1-Wire будут недоступны, а команды для этих интерфейсов будут генерировать код ошибки «Unknown Command» — неизвестная команда

— I2C_SEL — установленный флаг означает, что шлюз настроен для работы через интерфейс I2C. При этом регистры интерфейсов 1-Wire/SPI будут недоступны, а команды для этих интерфейсов будут генерировать код ошибки «Unknown Command» — неизвестная команда

Если не установлен ни один из флагов 1W_SEL/SPI_SEL/I2C_SEL, то, соответственно, регистры всех трёх интерфейсов недоступны, и команды для всех трёх интерфейсов будут генерировать код ошибки «Unknown Command» — неизвестная команда. Одновременно может быть установлен только один из флагов 1W_SEL/SPI_SEL/I2C_SEL

IO_FLAGS:

[7..6 — not used, 5 — WAIT_PORTD, 4 — WAIT_DDRD, 3 — WAIT_PORTC, 2 — WAIT_DDRC, 1 — WAIT_PORTB, 0 — WAIT_DDRB]

— WAIT_PORTD — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый по UART байт будет записан в регистр PORTD (биты 0,1,5 защищены маской)

— WAIT_DDRD — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт будет записан в регистр DDRD (биты 0,1,5 защищены маской)

— WAIT_PORTC — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт будет записан в регистр PORTC (биты 6,7 защищены маской)

— WAIT_DDRC — если флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт будет записан в регистр DDRC (биты 6,7 защищены маской)

— WAIT_PORTB — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт будет записан в регистр PORTB

COMMON_FLAGS, то следующий принятый байт будет записан в регистр DDRB

ADD_FLAGS:

[7..3 — not used, 2 — WAIT_IOG_TIME, 1 — WAIT_EXTENDED, 0 — WAIT_IO_BYTE]

— WAIT_IOG_TIME — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт определяет длительность задержки для команды SetIOG (оно будет сохранено в EPROM)

— WAIT_EXTENDED — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт — это расширенная общая команда

— WAIT_IO_BYTE — если этот флаг установлен вместе с флагом USE_ADD регистра COMMON_FLAGS, то следующий принятый байт определяет состояние регистров PORT или DDR одного из портов, в зависимости от установленных флагов регистра IO_FLAGS

ERROR:

Этот регистр содержит последний возвращённый командой код или код ошибки приёма по UART, если такая ошибка имела место при приёме команд или данных

1.2 Регистры интерфейсов

1.2.1 Регистры интерфейса I2C

FLAGS_I2C:

[7..3 — not used, 2 — NEED_I2C_ACK, 1 — RECIEVE_I2C_ACK, 0 — WAIT_I2C_BYTE]

— NEED_I2C_ACK — этот флаг используется для определения того, нужно ли отправлять слэйву подтверждение после приёма от него байта

— REСIEVE_I2C_ACK — этот флаг устанавливается, если слэйв прислал подтверждение после отправки ему байта

— WAIT_I2C_BYTE — этот флаг используется для определения того, что следующий принятый по UART байт — это не команда, а данные для передачи по шине

BTS_I2C:

В этот регистр помещается байт, который будет передан по шине I2C

RDB_I2C:

В этот регистр помещается байт, считанный с шины I2C

1.2.2 Регистры интерфейса SPI

CONFIG_SPI:

[7..3 — not used, 2 — ENDIAN, 1 и 0 — CPOL и CPHA]

— ENDIAN — этот флаг используется для определения порядка передачи битов из сдвигового регистра (0 — младшим вперёд, 1 — старшим вперёд)

— 1 и 0 — флаги выбора режима SPI (полярность и фаза сигнала CLOCK, соответственно)

PAKET_SIZE:

Этот регистр содержит номер последнего бита пакета. Поскольку номера битов считаются с нуля, то этот номер на единицу меньше размера пакета. Может принимать значения от 0 до 63 (соответственно, размер пакета может быть от 1 до 64 бит)

FLAGS_SPI:

[7..6 — not used, 5 — FAST_READ_SPI, 4 — FAST_SEND_SPI, 3 — CONFIG_SPI_IS, 2 — WAIT_SPI_PAKET, 1 — WAIT_SPI_PAKETSIZE, 0 — WAIT_SPI_CONFIG]

— FAST_READ_SPI — если этот флаг установлен, то сразу после выполнения обмена по SPI значащие байты сдвигового регистра будут отправлены по UART (только значащие, а не все 8 целиком). Другими словами, результат выполнения этой команды выглядит так, как если бы сразу после выполнения команды StartChange_SPI была выполнена команда ReadSignPaket_SPI

— FAST_SEND_SPI — если этот флаг установлен, то сразу после приёма всех байт пакета будет автоматически выполнен обмен данными по шине SPI (без каких-либо дополнительных команд). Другими словами, результат выполнения этой команды выглядит так, как если бы сразу после получения всех значащих байт пакета автоматически выполнилась команда StartChange_SPI

— CONFIG_SPI_IS — этот флаг используется для обозначения того, что интерфейс настроен и можно загружать пакеты в сдвиговый регистр (пакеты обязательно должны загружаться только после того, как выбран режим и установлен размер пакета)

— WAIT_SPI_PAKET — этот флаг используется для определения того, что следующий принятый по UART байт — это не команда, а данные для передачи по шине.

— WAIT_SPI_PAKETSIZE — этот флаг используется для определения того, что следующий принятый по UART байт — это не команда, а размер пакета SPI

— WAIT_SPI_PAKET — этот флаг используется для определения того, что следующий принятый по UART байт — это не команда, а байт конфигурации (будет записан в регистр CONFIG_SPI)

REG0REG7:

Эти 8 регистров используются как 64-х битный сдвиговый регистр SPI, формата: REG0_REG1_REG2_REG3_REG4_REG5_REG6_REG7. REG7 — младший байт, REG0 — старший байт. При загрузке в эти регистры по UART данных для передачи, передаваемый пакет нужно загружать младшим байтом вперёд. Если SPI сконфигурирован для передачи данных старшим битом вперёд, то пакет после загрузки автоматически выравняется к старшему биту регистра REG0

1.2.3 Регистры интерфейса 1-Wire

FLAGS_1W:

[7 — WAIT_1W_TIMES, 6 — WAIT_1W_BIT, 5 — WAIT_1W_BYTE, 4 — SLAVE_1W_IS, 3 — NEED_1W_STRPU, 2 — SEND_1W_RESET, 1 — READ_1W_BIT, 0 — SEND_1W_BIT]

— WAIT_1W_TIMES — этот флаг используется для загрузки с компьютера новых значений таймингов. После установки этого флага следующие 9 принятых по UART байт будут записаны в специальные регистры, определяющие различные тайминги процедур 1-Wire (подробности в описании регистров, в которых хранятся тайминги)

— WAIT_1W_BIT — этот флаг используется для определения того, что следующий принятый по UART байт — это не команда, а байт, младший бит которого должен быть передан по шине 1-Wire

— WAIT_1W_BYTE — этот флаг используется для определения того, что следующий принятый по UART байт — это не команда, а байт, который должен быть передан по шине 1-Wire

— SLAVE_1W_IS — этот флаг используется для определения того, что в ответ на посланный по шине reset был получен сигнал presence

— NEED_1W_STRPU — если этот флаг установлен, то после отправки очередного байта по шине 1-Wire будет организована жёсткая подтяжка этой шины к шине питания (не позднее 10 мкс). То есть после отправки последнего бита соответствующий вывод микроконтроллера переключится не в z-состояние, а в состояние выхода с высоким уровнем сигнала

— SEND_1W_RESET — после установки этого флага шлюз посылает в шину сигнал reset

— READ_1W_BIT — этот флаг используется для определения того, что шлюз должен считать с шины только один бит

— SEND_1W_BIT — этот флаг используется для определения того, что шлюз должен посылать в шину только младший бит регистра BTS_1W

BTS_1W:

В этот регистр помещается байт, который будет передан по шине 1W (или байт, младший бит которого будет передан по шине 1W при побитной передаче)

RDB_1W:

В этот регистр помещается байт, считанный с шины 1W (или байт, младший бит которого был принят по шине 1W при побитной передаче)

RST1_1WRST3_1W:

Эти 3 регистра используются для хранения значений, определяющих тайминги в процессе отправки в шину сигнала RESET и чтения сигнала PRESENCE. Значение в регистре RST1_1W определяет длительность всей процедуры отправки сигнала RESET и считывания сигнала presence, значение в регистре RST2_1W — определяет длительность сигнала RESET, а значение в регистре RST3_1W — момент считывания сигнала presence

Дефолтные значения: RST1_1W = 134 (0x86), RST2_1W = 196 (0xC4), RST3_1W = 204 (0xCC). В соответствии с этими значениями, длительность всей процедуры равна (255-134)*64*0,125 = 968 мкс, длительность сигнала RESET равна (196-134)*64*0,125 = 496 мкс, а считывание сигнала presence происходит через (204-196)*64*0,125 = 64 мкс после отпускания шины мастером

SB1_1WSB3_1W:

Эти 3 регистра используются для хранения значений, определяющих тайминги в процессе отправки бита в шину. Регистр SB1_1W определяет длительность тайм-слота передачи данных, регистр SB2_1W — момент установки на шине передаваемого значения, а регистр SB3_1W — момент отпускания мастером шины 1-Wire

Дефолтные значения: SB1_1W = 188 (0xBC), SB2_1W = 191 (0xBF), SB3_1W = 249 (0xF9). В соответствии с этими значениями, длительность всего тайм-слота равна (255-188)*8*0,125 = 67 мкс, мастер выставляет на шину передаваемое значение через (191-188)*8*0,125 = 3 мкс после начала тайм-слота, а отпускает шину через (249-188)*8*0,125 = 61 мкс после начала тайм-слота

RB1_1WRB3_1W:

Эти 3 регистра используются для хранения значений, определяющих тайминги в процессе считывания бита с шины 1-Wire. Регистр RB1_1W определяет общую длительность тайм-слота чтения, регистр RB2_1W — момент отпускания шины 1-Wire, а регистр RB3_1W — момент чтения бита с шины

Дефолтные значения: RB1_1W = 188 (0xBC), RB2_1W = 191 (0xBF), RB3_1W = 199 (0xC7). В соответствии с этими значениями, длительность всего тайм-слота равна (255-188)*8*0,125 = 67 мкс, мастер отпускает шину через (191-188)*8*0,125 = 3 мкс после начала тайм-слота, а чтение данных с шины происходит через (199-188)*8*0,125 = 11 мкс после начала тайм-слота

2. Команды

2.1 Команды общего назначения и GPIO

0x00 – ResetDevice: сбрасывает все общие флаги, кроме REPORTS_EN и AUTOLOAD_EN, сбрасывает все дополнительные флаги, сбрасывает флаги регистра IO_FLAGS, очищает регистры флагов интерфейсов I2C, SPI, 1W, регистр конфигурации SPI, регистр размера пакета SPI, регистр ERROR, переинициализирует порты (все на вход, в Z-состояние)

При успешном выполнении возвращает 0x00

0x01 – InterfaceChoiceI2C: сбрасывает все общие флаги, кроме REPORTS_EN и AUTOLOAD_EN, поднимает флаг I2C_SEL, переинициализирует порты (все на вход, в Z-состояние), переключает линию CS на выход и устанавливает её в единицу

При успешном выполнении возвращает 0x00

0x02 – InterfaceChoiceSPI: сбрасывает все общие флаги, кроме REPORTS_EN и AUTOLOAD_EN, поднимает флаг SPI_SEL, переинициализирует порты (все на вход, в Z-состояние), переключает линию SS на выход и устанавливает её в единицу

При успешном выполнении возвращает 0x00

0x03 – InterfaceChoice1W: сбрасывает все общие флаги, кроме REPORTS_EN и AUTOLOAD_EN, поднимает флаг 1W_SEL, переинициализирует порты (все на вход, в Z-состояние)

При успешном выполнении возвращает 0x00

0x04 – ReadError: отсылает по UART содержимое регистра ERROR и обнуляет этот регистр

0x05 – SaveToEPROM: сохраняет в EPROM регистр COMMON_FLAGS, 6 регистров GPIO (направление и защёлки портов B, C и D), а также 3 регистра, содержащих настройки SPI (если интерфейс SPI в момент исполнения команды не выбран, то в последние 3 байта будет записано 0xFF)

При успешном выполнении возвращает 0x00

0x06 – ReadFromEPROM: отсылает по UART 10 байт EPROM (информация, записанная командой SaveToEPROM)

0x07 – EnableReports: устанавливает флаг REPORTS_EN в регистре COMMON_FLAGS

При успешном выполнении возвращает 0x00.

0x08 – DisableReports: сбрасывает флаг REPORTS_EN в регистре COMMON_FLAGS

0x09 – EnableAutoLoad: устанавливает флаг AUTOLOAD_EN в регистре COMMON_FLAGS

При успешном выполнении возвращает 0x00

0x0A – DisableAutoLoad: сбрасывает флаг AUTOLOAD_EN в регистре COMMON_FLAGS

При успешном выполнении возвращает 0x00

0x0B – DDRBSetup: устанавливает в единицу флаги: USE_ADD регистра COMMON_FLAGS, WAIT_IO_BYTE регистра ADD_FLAGS и WAIT_DDRB регистра IO_FLAGS. Таким образом, следующий принятый по UART байт будет загружен в регистр DDRB

При успешном выполнении возвращает 0x00.

0x0C – DDRBRead: отправляет по UART значение из регистра DDRB

0x0D – PORTBSetup: устанавливает в единицу флаги: USE_ADD регистра COMMON_FLAGS, WAIT_IO_BYTE регистра ADD_FLAGS и WAIT_PORTB регистра IO_FLAGS. Таким образом, следующий принятый по UART байт будет загружен в регистр PORTB

При успешном выполнении возвращает 0x00

0x0E – PORTBRead: отправляет по UART значение из регистра PORTB

0x0F – DDRCSetup: устанавливает в единицу флаги: USE_ADD регистра COMMON_FLAGS, WAIT_IO_BYTE регистра ADD_FLAGS и WAIT_DDRC регистра IO_FLAGS. Таким образом, следующий принятый по UART байт будет загружен в регистр DDRC

При успешном выполнении возвращает 0x00

0x10 – DDRCRead: отправляет по UART значение из регистра DDRC

0x11 – PORTCSetup: устанавливает в единицу флаги: USE_ADD регистра COMMON_FLAGS, WAIT_IO_BYTE регистра ADD_FLAGS и WAIT_PORTC регистра IO_FLAGS. Таким образом, следующий принятый по UART байт будет загружен в регистр PORTC

При успешном выполнении возвращает 0x00

0x12 – PORTCRead: отправляет по UART значение из регистра PORTC

0x13 – DDRDSetup: устанавливает в единицу флаги: USE_ADD регистра COMMON_FLAGS, WAIT_IO_BYTE регистра ADD_FLAGS и WAIT_DDRD регистра IO_FLAGS. Таким образом, следующий принятый по UART байт будет загружен в регистр DDRD

При успешном выполнении возвращает 0x00

0x14 – DDRDRead: отправляет по UART значение из регистра DDRD

0x15 – PORTDSetup: устанавливает в единицу флаги: USE_ADD регистра COMMON_FLAGS, WAIT_IO_BYTE регистра ADD_FLAGS и WAIT_PORTD регистра IO_FLAGS. Таким образом, следующий принятый по UART байт будет загружен в регистр PORTD

При успешном выполнении возвращает 0x00

0x16 – PORTDRead: отправляет по UART значение из регистра PORTD

0x17 – PINBRead: отправляет по UART значение из регистра PINB

0x18 – PINCRead: отправляет по UART значение из регистра PINC

0x19 – PINDRead: отправляет по UART значение из регистра PIND

0x1A – ReadCommonConfig: отправляет по UART общую конфигурацию шлюза (содержимое регистра COMMON_FLAGS)

0x1B – ReadVersion: отправляет по UART хранящийся в EPROM номер версии ПО шлюза

0x1C – SetIOG: устанавливает в 1 защёлку на линии PD4 (ранее I/O_0), а затем, после паузы, устанавливает в 1 защёлку на линии PD3 (ранее I/O_1). Величина паузы определяется количеством циклов задержки, записанным в EPROM (1 цикл — около 375,5 нс, по умолчанию количество циклов равно 0xFF). Это значение можно прочитать / изменить расширенными командами ReadIOGTime / LoadIOGTime

При успешном выполнении возвращает 0x00

0x1D – DoExtendedCommand: устанавливает в 1 бит WAIT_EXTENDED регистра COMMON_FLAGS. Таким образом следующий принятый от компьютера байт будет интерпретироваться как расширенная общая команда

При успешном выполнении возвращает 0x00

0x1E – ReadSerialNumber: отправляет по UART хранящийся в EPROM серийный номер шлюза

2.1.1 Расширенные команды общего назначения

0x00 – EnterProgMode_HVAVR: выполняет подачу питания (+5 Вольт) и далее, через 38 мкс, напряжения программирования (+12 Вольт) на соответствующие выводы разъёма XT3.1 базового модуля. Такой алгоритм необходим для перевода большинства микроконтроллеров AVR в режим высоковольтного программирования

При успешном выполнении возвращает 0x00

0x01 – GivePagelPosPulse_HVAVR: формирует положительный импульс (1 мкс) на линии Pagel разъёма XT3.3 модуля AVR (предварительно линия PC5 должна быть настроена на выход)

При успешном выполнении возвращает 0x00

0x02 – GiveXTALPosPulse_HVAVR: формирует положительный импульс (1 мкс) на линии XTAL разъёма XT3.3 модуля AVR (предварительно линия PD3 должна быть настроена на выход)

При успешном выполнении возвращает 0x00

0x03 – GiveWRNegPulse_HVAVR: формирует отрицательный импульс (1 мкс) на линии WR разъёма XT3.3 модуля AVR (предварительно линия PD4 должна быть настроена на выход)

При успешном выполнении возвращает 0x00

0x04 – ExecuteVppFirstAlg_PIC: выполняет алгоритм входа в режим программирования PIC-контроллеров Vpp-first. Предварительно линии PC5 (Clock) и PC4 (Data_Out) должны быть переключены на выход и установлены в 0

При успешном выполнении возвращает 0x00

0x05 – ExecuteVddFirstAlg_PIC: выполняет алгоритм входа в режим программирования PIC-контроллеров Vdd-first (предварительно линии PC5 (Clock) и PC4 (Data_Out) должны быть переключены на выход и установлены в 0)

При успешном выполнении возвращает 0x00

0x06 – ExecuteVppLastAlg_PIC: выполняет алгоритм выхода из режима программирования PIC-контроллеров Vpp-last

При успешном выполнении возвращает 0x00

0x07 – ExecuteVddLastAlg_PIC: выполняет алгоритм выхода из режима программирования PIC-контроллеров Vdd-last

При успешном выполнении возвращает 0x00

0x08 – GiveWR250NegPulse_HVAVR: формирует отрицательный импульс (25 мс) на линии WR разъёма XT3.3 модуля AVR (предварительно линия PD4 должна быть настроена на выход)

При успешном выполнении возвращает 0x00

0x09 – GiveWR20NegPulse_HVAVR: формирует отрицательный импульс (2.0 мс) на линии WR разъёма XT3.3 модуля AVR (предварительно линия PD4 должна быть настроена на выход)

При успешном выполнении возвращает 0x00

0x0A – SetPort_PG: записывает 1 в 5 бит регистра PORTD. Этот бит защищён маской и переключается в 1 только командой SetPort_PG, команда PORTDSetup на него не действует

При успешном выполнении возвращает 0x00

0x0B – ClearPort_PG: записывает 0 в 5 бит регистра PORTD. Этот бит защищён маской и переключается в 0 только командой ClearPort_PG, команда PORTDSetup на него не действует

При успешном выполнении возвращает 0x00

0x0C – SetDDR_PG: записывает 1 в 5 бит регистра DDRD (устанавливает направление PD5 — на выход). Этот бит защищён маской и переключается в 1 только командой SetDDR_PG, команда DDRDSetup на него не действует

При успешном выполнении возвращает 0x00

0x0D – ClearDDR_PG: записывает 0 в 5 бит регистра DDRD (устанавливает направление PD5 — на вход). Этот бит защищён маской и переключается в 0 только командой ClearDDR_PG, команда DDRDSetup на него не действует

При успешном выполнении возвращает 0x00

0x0E – LoadIOGTime: устанавливает биты USE_ADD регистра COMMON_FLAGS и WAIT_IOG_TIME регистра ADD_FLAGS. Таким образом следующий принятый байт будет сохранён в EPROM в качестве длительности задержки для команды SetIOG

При успешном выполнении возвращает 0x00

0x0F – ReadIOGTime: читает из EPROM байт, определяющий длительность задержки для команды SetIOG, и отправляет его по UART

2.2 Команды интерфейсов

2.2.1 Команды интерфейса I2C

0x20 – SendStart_I2C: формирует на шине «старт-условие»

При успешном выполнении возвращает 0x00

0x21 – SendStop_I2C: формирует на шине «стоп-условие»

При успешном выполнении возвращает 0x00

0x22 – SendByte_I2C: поднимает флаг WAIT_I2C_BYTE (означает, что следующий принятый байт будет отправлен по I2C)

После приёма команды возвращает 0x00, далее, после приёма следующего байта и его отправки, сбрасывает флаг WAIT_I2C_BYTE и возвращает 0x00 при получении ACK от слэйва или 0x20 при отсутствии ACK от слэйва

0x23 – ReadByteA_I2C: поднимает флаг NEED_I2C_ACK (при поднятом флаге NEED_I2C_ACK процедура чтения посылает в конце сигнал ACK), читает байт с шины I2C и посылает его по UART

0x24 – ReadByte_I2C: сбрасывает флаг NEED_I2C_ACK (при сброшенном флаге NEED_I2C_ACK процедура чтения не посылает в конце сигнал ACK), читает байт с шины I2C и посылает его по UART

0x25 – ClearCS_I2C: сбрасывает линию CS в ноль (низкий уровень)

При успешном выполнении возвращает 0x00

0x26 – SetCS_I2C: устанавливает линию CS в единицу (высокий уровень)

При успешном выполнении возвращает 0x00

0x27 – ReadCS_I2C: читает состояние линии CS (считывает соответствующий бит регистра PIN и отправляет по UART 0x0F, если этот бит равен нулю или 0x8F, если он равен единице)

2.2.2 Команды интерфейса SPI

0x40 – LoadConfig_SPI: поднимает флаг WAIT_SPI_CONFIG (означает, что следующий принятый байт будет записан в регистр конфигурации SPI)

После приёма команды возвращает 0x00, далее, после приёма следующего байта, затирает у него старшие 5 бит и записывает результат в регистр CONFIG_SPI, далее поднимает флаг CONFIG_SPI_IS в регистре FLAGS_SPI, сбрасывает флаг WAIT_SPI_CONFIG в этом же регистре и возвращает 0x00

0x41 – ReadConfig_SPI: отправляет по UART содержимое регистра CONFIG_SPI или код ошибки 0x40, если флаг CONFIG_SPI_IS в регистре FLAGS_SPI сброшен (этот код ошибки не совпадает ни с одной возможной конфигурацией)

0x42 – LoadPaketSize_SPI: поднимает флаг WAIT_SPI_PAKETSIZE в регистре FLAGS_SPI. Это означает, что следующий принятый байт будет содержать размер пакета

После приёма команды возвращает 0x00, далее, после приёма следующего байта, отнимает от него 1, затирает у полученного байта старшие 2 бита и записывает его в регистр PAKET_SIZE (значение в этом регистре получается на 1 меньше размера пакета, то есть это как бы номер последнего бита, поскольку биты считаются с нуля), после чего сбрасывает флаг WAIT_SPI_PAKETSIZE и возвращает 0x00 если всё прошло успешно

0x43 – ReadPaketSize_SPI: прибавляет 1 к значению в регистре PAKET_SIZE и отправляет это значение по UART (размер пакета)

0x44 – LoadPaket_SPI: поднимает флаг WAIT_PAKET_SPI в регистре FLAGS_SPI. Это означает, что следующие N принятых байт будут записаны в сдвиговый регистр

Если в регистре FLAGS_SPI установлен флаг CONFIG_SPI_IS, то после получения команды возвращает 0x00 и поднимает флаг WAIT_PAKET_SPI, далее, после получения всего пакета, сбрасывает флаг WAIT_PAKET_SPI и возвращает 0x00, если всё прошло успешно. Если флаг CONFIG_SPI_IS не установлен, то сразу после получения команды возвращает код ошибки 0x40

0x45 – ReadPaket_SPI: отправляет по UART содержимое сдвигового регистра (все 8 байт целиком)

0x46 – StartChange_SPI: выполняет обмен данными между сдвиговыми регистрами шлюза и подключенного к нему устройства

При успешном выполнении возвращает 0x00, при сброшенном флаге CONFIG_SPI_IS — код ошибки 0x040

0x47 – ClearSS_SPI: сбрасывает линию SS в ноль (низкий уровень)

При успешном выполнении возвращает 0x00

0x48 – SetSS_SPI: устанавливает линию SS в единицу (высокий уровень)

При успешном выполнении возвращает 0x00

0x49 – ReadSS_SPI: читает состояние линии SS (считывает соответствующий бит регистра PINB и отправляет по UART 0x0F, если этот бит равен нулю или 0x8F, если он равен единице)

0x4A – ReadSignPaket_SPI: отправляет по UART значащие байты сдвигового регистра, начиная с самого младшего.
   После обмена по SPI результат в любом случае выравнивается к младшему биту, поэтому если мы хотим получить результат, то читать нужно в любом случае младшие значащие байты буфера (независимо от того, каким битом вперёд мы отправляли данные). Именно это и делает команда ReadSignPaket_SPI.
   После загрузки данных в буфер при выбранной передаче старшим битом вперёд, данные автоматически выравниваются к старшему байту и, таким образом, для проверки загруженных данных использовать команду ReadSignPaket_SPI нельзя. В этом случае для проверки загруженных данных нужно вычитывать весь буфер

0x4B – FastReadPaket_SPI: устанавливает флаг 5 (FAST_READ_SPI) регистра FLAGS_SPI и выполняет команду StartChange_SPI. Таким образом, сразу после вполнения обмена по SPI, значащие байты сдвигового регистра будут из шлюза переданы по UART на компьютер

0x4C – FastSendPaket_SPI: поднимает флаги 2 (WAIT_PAKET_SPI) и 4 (FAST_SEND_SPI) регистра FLAGS_SPI. Таким образом сразу после приёма шлюзом по UART нужного количества байт (и их выравнивания, при необходимости) эти байты будут отправлены по SPI

2.2.3 Команды интерфейса 1-Wire

0x60 – SendReset_1W: формирует на шине сброс и определяет, был ли в ответ на это сформирован сигнал presence

Возвращает 0x00 при наличии сигнала presence или 0x60 при его отсутствии

0x61 – SendByte_1W: устанавливает флаг WAIT_1W_BYTE в регистре FLAGS_1W. Это означает, что следующий принятый по UART байт будет отправлен по шине 1-Wire

Возвращает 0x00 после установки флага WAIT_1W_BYTE, далее, после того, как следующий принятый байт будет отправлен по шине 1-Wire, сбрасывает флаг WAIT_1W_BYTE и ещё раз возвращает 0x00

0x62 – ReadByte_1W: принимает байт с шины 1-Wire и отправляет его по UART

0x63 – SendBit_1W: устанавливает флаг WAIT_1W_BIT в регистре FLAGS_1W. Это означает, что младший бит следующего принятого по UART байта будет отправлен по шине 1-Wire

Возвращает 0x00 после установки флага WAIT_1W_BIT, далее, после того как младший бит следующего принятого байта будет отправлен по шине 1-Wire, сбрасывает флаг WAIT_1W_BIT и возвращает 0x00

0x64 – ReadBit_1W: принимает бит с шины 1-Wire и отправляет по UART 0x0F, если этот бит нулю, или 0x8F, если этот бит равен единице

0x65 – LoadTimes_1W: поднимает флаг WAIT_1W_TIMES в регистре FLAGS_1W. Это означает, что следующие 9 принятых по UART байт будут записаны в регистры, определяющие значения таймингов 1-Wire (RST1_1W..RST3_1W, SB1_1W..SB3_1W, RB1_1W..RB3_1W)

Возвращает 0x00 после установки флага, а также после приёма всех девяти байт задержек

0x66 – ReadTimes_1W: отправляет по UART 9 байт, содержащих значения регистров RST1_1W..RST3_1W, SB1_1W..SB3_1W, RB1_1W..RB3_1W, определяющих тайминги для 1-Wire

0x67 – SendByteSTRPU_1W:Возвращает 0x00 и устанавливает флаги WAIT_1W_BYTE и NEED_1W_STRPU в регистре FLAGS_1W. Это означает, что следующий принятый по UART байт будет отправлен по шине 1-Wire, а сразу после передачи последнего бита будет установлена жёсткая подтяжка линии 1-Wire к шине питания (после чего также будет возвращён байт 0x00)

0x68 – ClearSTRPU_1W: отменяет жёсткую подтяжку шины 1-Wire к шине питания и возвращает шину 1-Wire в свободное состояние (вывод контроллера, формирующий шину, будет переведён в z-состояние)

При успешном выполнении возвращает 0x00

0x69 – Get580usPulse_1W: сформировать отрицательный импульс 580 мкс на PB7. При этом дополнительным модулем для 1-Wire на шине будет сформирован импульс повышенного напряжения (для DS2502)

При успешном выполнении возвращает 0x00

0x6A – Get110msPulse_1W: сформировать отрицательный импульс 110 мс на PB7. При этом дополнительным модулем для 1-Wire на шине будет сформирован импульс повышенного напряжения (для AN1990)

При успешном выполнении возвращает 0x00

3. Коды ошибок

1) 0x00 – NoError: этот код возвращается, если при выполнении команды не возникало никаких ошибок

2) 0x80 – UnknownCommand: этот код ошибки означает, что была принята неизвестная команда. Он, в частности, генерируется при попытке выполнить команду интерфейса, который не выбран в регистре COMMON_FLAGS

3) 0x81 – FrameError: ошибка передачи данных по UART (ошибка кадра). Принятая после такой ошибки команда не будет считана и выполнена

4) 0x82 – DataOverrun: ошибка передачи данных по UART (переполнение). Принятая после такой ошибки команда не будет считана и выполнена

5) 0x83 – ParityError: ошибка передачи данных по UART (ошибка чётности). Принятая после такой ошибки команда не будет считана и выполнена

6) 0x20 – NAK_I2C: от подчинённого устройства нет подтверждения приёма данных по шине I2C

7) 0x40 – NoConfig_SPI: нет установленной конфигурации SPI. Такая ошибка возникает, например, при попытке отправить/принять данные по шине SPI при отсутствии установленной конфигурации. Этот код ошибки не совпадает ни с одной из возможных конфигураций SPI

8) 0x60 — NoPresence: в ответ на сброс шины не получен сигнал presence. Такая ошибка говорит об отсутствии ведомых устройств на шине 1-Wire

Добавить комментарий