I2C Status register 1 (I2C_SR1)
Первый регистр состояния интерфейса I2C
Смещение (Address offset): 0x14
Reset value: 0x0000
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
| SMBALERT | TIMEOUT | Reserved | PECERR | OVR | AF | ARLO | BERR |
| rc_w0 | rc_w0 | --- | rc_w0 | rc_w0 | rc_w0 | rc_w0 | rc_w0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| TxE | RxNE | Reserved | STOPF | ADD10 | BTF | ADDR | SB |
| rw | rw | --- | rw | rw | rw | rw | rw |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
В режиме host:
0 : нет сигнала SMBus Alert (SMBA)
1 : на выводе SMBA принят сигнал.
В режиме slave:
0 :
1 :
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : нет ошибки
1 : ошибка таймаута: низкий уровень SCL более 25 мс;
Tlow:mext
Tlow:sext
Если бит установлен в slave-режиме: ведомый должен сбросить связь и освободить линию.
Если бит установлен в master-режиме: ведущий должен отправить состояние Stop.
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : нет ошибки - приёмник возвращает ACK после приёма PEC (если ASC=1)
1 : ошибка PEC - приёмник возвращает NACK после приёма PEC (для любого ASC)
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : нет переполнения / потери информации
1 : в сообщении есть лишние байты или часть информации потеряно.
В slave-режиме устанавливается аппаратно, когда NOSTRETCH=1 и:
- в режиме приёма при получении нового байта (включая ACK) регистр DR ещё не был прочитан. Новый полученный байт будет потерян;
- в режиме передачи когда отправляется новый байт, а он ещё не записан в регистр DR. Один и тот же байт будет отправлен дважды.
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : нет ошибки подтверждения;
1 : ошибка подтверждения. Устанавливается аппаратно когда возвращается нет подтверждения.
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : проигранный арбитраж не определён;
1 : определён проигрыш арбитража. Устанавливается аппаратно, когда интерфейс теряет возможность управления шиной с помощью другого ведущего устройства.
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : нет потери состояния Start или Stop;
1 : потеря состояния Start или Stop. Устанавливается аппаратно, когда интерфейс обнаруживает фронт или спад SDA при высоком SCL, возникающий в недопустимом положении во время передачи байта.
Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)
0 : регистр данных DR занят передаваемым байтом;
1 : регистр данных DR свободен и готов для загрузки следующего передаваемого байта.
TxE не устанавливается во время фазы адресации.
Очищается записью в регистр данных DR, или аппаратно при выполнении условий Start и Stop, или при отключении интерфейса I2C (PE=0 в регистре CR1).
TxE не устанавливается, если получен NACK, либо если следующим передаваемым байтом является PEC (когда PEC=1 в регистре CR1).
TxE не очищается при записи первых передаваемых данных, или при записи данных при установке BTF, поскольку в обоих случаях регистр данных по-прежнему пуст
0 : регистр данных DR пуст, данные не приняты;
1 : в регистре данных DR есть принятые данные.
RxNE не устанавливается во время фазы адресации.
RxNE очищается при чтении или записи в регистр данных DR, или при отключении интерфейса I2C (PE=0 в регистре CR1).
Значение RxNE не определено во время события ARLO.
RxNE не очищается при считывании данных, когда установлен BTF, так как регистр данных по-прежнему заполнен.
0 : состояние Stop не определено;
1 : определено состояние Stop.
Устанавливается аппаратно, когда ведомое устройство обнаруживает состояние остановки на шине после подтверждения (если ACK=1).
Очищается программно, при чтении регистра SR1 с последующей записью в регистр CR1, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1).
Бит STOPF не устанавливается после приёма NACK.
Всегда рекомендуется после установки бита STOPF выполнять полную очистку: прочитать регистр SR1, затем записать в регистр CR1.
0 : первый байт 10-битного адреса не отправлен;
1 : ведущий отправил первый байт 10-битного адреса.
Устанавливается аппаратно, очищается чтением из регистра SR1 с последующей записью в регистр DR второго байта адреса, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1).
Бит ADD10 не устанавливается после приёма NACK.
0 : передача байта данных не выполнена;
1 : передача байта данных прошла успешно.
Устанавливается аппаратно, когда NOSTRETCH=0 и:
- в режиме приёма при получении нового байта (включая ACK) а регистр DR ещё не был прочитан (RxNE=1);
- в режиме передачи когда должен быть отправлен новый байт, а в регистр DR ещё не записан (TxE=1);
Очищается программно, при чтении регистра SR1 с последующей записью в регистр DR, или аппаратно после условий Start или Stop, или при отключении интерфейса I2C (PE=0 в регистре CR1).
Бит BTF не устанавливается после приема NACK.
Бит BTF не устанавливается, если следующим передаваемым байтом является PEC (TRA=1 в регистре I2C_SR2 и PEC=1 в регистре I2C_CR1)
Очищается программно при чтении регистра SR1 с последующим чтением регистра SR2, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1).
В slave-режиме:
0 : адрес не совпадает или не принят;
1 : совпадение принятого адреса.
Устанавливается аппаратно когда принятый адрес ведомого устройства совпадает с содержимым одного из регистров OAR, или с общим (широковещательным) вызовом, или с одним из адресов SMBus: адресом по-умолчанию, адресом хоста или адресом SMBA.
Для сброса ADDR в slave-режиме рекомендуется произвести чтение регистра SR1 с последующим чтением регистра SR2.
В master-режиме:
0 : передача адреса не завершена;
1 : завершена передача адреса.
Для 7-разрядной адресации бит устанавливается после подтверждения байта (ACK), для 10-разрядной адресации бит устанавливается после подтверждения 2-го байта.
Бит ADDR не устанавливается после приема NACK.
0 : условие Start не выполнено;
1 : выполнено условие Start.
Очищается программно при чтении регистра SR1 с последующей записью в регистр DR, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1).
/******************* Bit definition for I2C_SR1 register ********************/
#define I2C_SR1_SB ((uint16_t)0x0001) /* Start Bit (Master mode) */
#define I2C_SR1_ADDR ((uint16_t)0x0002) /* Address sent (master mode)/matched (slave mode) */
#define I2C_SR1_BTF ((uint16_t)0x0004) /* Byte Transfer Finished */
#define I2C_SR1_ADD10 ((uint16_t)0x0008) /* 10-bit header sent (Master mode) */
#define I2C_SR1_STOPF ((uint16_t)0x0010) /* Stop detection (Slave mode) */
#define I2C_SR1_RXNE ((uint16_t)0x0040) /* Data Register not Empty (receivers) */
#define I2C_SR1_TXE ((uint16_t)0x0080) /* Data Register Empty (transmitters) */
#define I2C_SR1_BERR ((uint16_t)0x0100) /* Bus Error */
#define I2C_SR1_ARLO ((uint16_t)0x0200) /* Arbitration Lost (master mode) */
#define I2C_SR1_AF ((uint16_t)0x0400) /* Acknowledge Failure */
#define I2C_SR1_OVR ((uint16_t)0x0800) /* Overrun/Underrun */
#define I2C_SR1_PECERR ((uint16_t)0x1000) /* PEC Error in reception */
#define I2C_SR1_TIMEOUT ((uint16_t)0x4000) /* Timeout or Tlow Error */
#define I2C_SR1_SMBALERT ((uint16_t)0x8000) /* SMBus Alert */