I2C Status register 1 (I2C_SR1)

Первый регистр состояния интерфейса I2C

Смещение (Address offset): 0x14

Reset value: 0x0000

15141312111098
SMBALERT TIMEOUT Reserved PECERR OVR AF ARLO BERR
rc_w0rc_w0---rc_w0rc_w0rc_w0rc_w0rc_w0
00000000
76543210
TxE RxNE Reserved STOPF ADD10 BTF ADDR SB
rwrw---rwrwrwrwrw
00000000


Биты
Имя
Описание
15
SMBALERT
SMBus alert
Сигнал на выводе SMBA

В режиме host:

 0 :  нет сигнала SMBus Alert (SMBA)

 1 :  на выводе SMBA принят сигнал.

В режиме slave:

 0 : 

 1 : 

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

14
TIMEOUT
Timeout or Tlow error (SMBus)
Ошибка таймаута или Tlow (только в режиме SMBus).

 0 :  нет ошибки

 1 :  ошибка таймаута: низкий уровень SCL более 25 мс;

Tlow:mext

Tlow:sext

Если бит установлен в slave-режиме: ведомый должен сбросить связь и освободить линию.

Если бит установлен в master-режиме: ведущий должен отправить состояние Stop.

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

13
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
12
PECERR
PEC Error in reception
Ошибка PEC при приёме

 0 :  нет ошибки - приёмник возвращает ACK после приёма PEC (если ASC=1)

 1 :  ошибка PEC - приёмник возвращает NACK после приёма PEC (для любого ASC)

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

11
OVR
Overrun/Underrun
Переполнение / потеря информации

 0 :  нет переполнения / потери информации

 1 :  в сообщении есть лишние байты или часть информации потеряно.

В slave-режиме устанавливается аппаратно, когда NOSTRETCH=1 и:

-  в режиме приёма при получении нового байта (включая ACK) регистр DR ещё не был прочитан. Новый полученный байт будет потерян;

-  в режиме передачи когда отправляется новый байт, а он ещё не записан в регистр DR. Один и тот же байт будет отправлен дважды.

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

10
AF
Acknowledge failure
Ошибка подтверждения

 0 :  нет ошибки подтверждения;

 1 :  ошибка подтверждения. Устанавливается аппаратно когда возвращается нет подтверждения.

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

9
ARLO
Arbitration lost (master mode)
Проигранный арбитраж (в режиме master)

 0 :  проигранный арбитраж не определён;

 1 :  определён проигрыш арбитража. Устанавливается аппаратно, когда интерфейс теряет возможность управления шиной с помощью другого ведущего устройства.

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

8
BERR
Bus error
Ошибка шины

 0 :  нет потери состояния Start или Stop;

 1 :  потеря состояния Start или Stop. Устанавливается аппаратно, когда интерфейс обнаруживает фронт или спад SDA при высоком SCL, возникающий в недопустимом положении во время передачи байта.

Очищается программно записью 0, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1)

7
TxE
Data register empty (transmitters)
В режиме передачи: освобождение регистра DR для передачи следующего байта

 0 :  регистр данных DR занят передаваемым байтом;

 1 :  регистр данных DR свободен и готов для загрузки следующего передаваемого байта.

TxE не устанавливается во время фазы адресации.

Очищается записью в регистр данных DR, или аппаратно при выполнении условий Start и Stop, или при отключении интерфейса I2C (PE=0 в регистре CR1).

TxE не устанавливается, если получен NACK, либо если следующим передаваемым байтом является PEC (когда PEC=1 в регистре CR1).

TxE не очищается при записи первых передаваемых данных, или при записи данных при установке BTF, поскольку в обоих случаях регистр данных по-прежнему пуст

6
RxNE
Data register not empty (receivers)
В режиме приёма: присутствие данных в регистре DR

 0 :  регистр данных DR пуст, данные не приняты;

 1 :  в регистре данных DR есть принятые данные.

RxNE не устанавливается во время фазы адресации.

RxNE очищается при чтении или записи в регистр данных DR, или при отключении интерфейса I2C (PE=0 в регистре CR1).

Значение RxNE не определено во время события ARLO.

RxNE не очищается при считывании данных, когда установлен BTF, так как регистр данных по-прежнему заполнен.

5
Reserved
Must be kept at reset value
Зарезервировано. Должно быть сохранено значение после сброса
4
STOPF
Stop detection (slave mode)
В slave-режиме: определение состояния Stop

 0 :  состояние Stop не определено;

 1 :  определено состояние Stop.

Устанавливается аппаратно, когда ведомое устройство обнаруживает состояние остановки на шине после подтверждения (если ACK=1).

Очищается программно, при чтении регистра SR1 с последующей записью в регистр CR1, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1).

Бит STOPF не устанавливается после приёма NACK.

Всегда рекомендуется после установки бита STOPF выполнять полную очистку: прочитать регистр SR1, затем записать в регистр CR1.

3
ADD10
10-bit header sent (Master mode)
В master-режиме: отправка первого байта 10-битного заголовка

 0 :  первый байт 10-битного адреса не отправлен;

 1 :  ведущий отправил первый байт 10-битного адреса.

Устанавливается аппаратно, очищается чтением из регистра SR1 с последующей записью в регистр DR второго байта адреса, или аппаратно при отключении интерфейса I2C (PE=0 в регистре CR1).

Бит ADD10 не устанавливается после приёма NACK.

2
BTF
Byte transfer finished
Завершеие передачи байта

 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)

1
ADDR
Address sent (master mode)/matched (slave mode)
Адрес отправлен (в режиме master) или адрес совпал (в режиме slave)

Очищается программно при чтении регистра 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
SB
Start bit (Master mode)
Стартовый бит (только для режима master)

 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 */