- 1. Регистры.
- 2. Команды.
- 3. Коды ошибок.
Список регистров:
COMMON_FLAGS, IO_FLAGS, ADD_FLAGS, ERROR
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 Регистры общего назначения и GPIO
[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
[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
[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
Этот регистр содержит последний возвращённый командой код или код ошибки приёма по UART, если такая ошибка имела место при приёме команд или данных
[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 байт — это не команда, а данные для передачи по шине
В этот регистр помещается байт, который будет передан по шине I2C
В этот регистр помещается байт, считанный с шины I2C
[7..3 — not used, 2 — ENDIAN, 1 и 0 — CPOL и CPHA]
— ENDIAN — этот флаг используется для определения порядка передачи битов из сдвигового регистра (0 — младшим вперёд, 1 — старшим вперёд)
— 1 и 0 — флаги выбора режима SPI (полярность и фаза сигнала CLOCK, соответственно)
Этот регистр содержит номер последнего бита пакета. Поскольку номера битов считаются с нуля, то этот номер на единицу меньше размера пакета. Может принимать значения от 0 до 63 (соответственно, размер пакета может быть от 1 до 64 бит)
[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)
Эти 8 регистров используются как 64-х битный сдвиговый регистр SPI, формата: REG0_REG1_REG2_REG3_REG4_REG5_REG6_REG7. REG7 — младший байт, REG0 — старший байт. При загрузке в эти регистры по UART данных для передачи, передаваемый пакет нужно загружать младшим байтом вперёд. Если SPI сконфигурирован для передачи данных старшим битом вперёд, то пакет после загрузки автоматически выравняется к старшему биту регистра REG0
1.2.3 Регистры интерфейса 1-Wire
[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
В этот регистр помещается байт, который будет передан по шине 1W (или байт, младший бит которого будет передан по шине 1W при побитной передаче)
В этот регистр помещается байт, считанный с шины 1W (или байт, младший бит которого был принят по шине 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 мкс после отпускания шины мастером
Эти 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 мкс после начала тайм-слота
Эти 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.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
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, если он равен единице)
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
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