Перейти к содержанию
    

Как отключить проверку ACK в HAL

whale,   с таким крайне информативным постом вы проявляете избыточное уважение к аудитории, поэтому ждите гору крайне толковых ответов 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Например, как? В I2C Master Transmitter получение ACK обрабатывается аппаратно, и если не получено состояние ACK, не будут выставлены биты TxE и BTF.
Логически это и объяснимо - если подчиненное устройство не ответило, то соединение должно быть завершено - устройство не может принимать новые данные.

Master transmitter

When the acknowledge pulse is received, the TxE bit is set by hardware and an interrupt is
generated if the ITEVFEN and ITBUFEN bits are set.
If TxE is set and a data byte was not written in the DR register before the end of the last data
transmission, BTF is set and the interface waits until BTF is cleared by a read from I2C_SR1
followed bya write to I2C_DR, stretching SCL low.

 

26.6.6 I2C Status register 1 (I2C_SR1)

Bit 7 TxE: Data register empty (transmitters)
0: Data register not empty
1: Data register empty
– Set when DR is empty in transmission. TxE is not set during address phase.
– Cleared by software writing to the DR register or by hardware after a start or a stop condition
or when PE=0.
TxE is not set if either a NACK is received, or if next byte to be transmitted is PEC (PEC=1)
Note: TxE is not cleared by writing the first data being transmitted, or by writing data when
BTF is set, as in both cases the data register is still empty.

Bit 2 BTF: Byte transfer finished
0: Data byte transfer not done
1: Data byte transfer succeeded
– Set by hardware when NOSTRETCH=0 and:
– In reception when a new byte is received (including ACK pulse) and DR has not been read
yet (RxNE=1).
– In transmission when a new byte should be sent and DR has not been written yet (TxE=1).
– Cleared by software reading SR1 followed by either a read or write in the DR register or by
hardware after a start or a stop condition in transmission or when PE=0.
Note: The BTF bit is not set after a NACK reception
The BTF bit is not set if next byte to be transmitted is the PEC (TRA=1 in I2C_SR2
register and PEC=1 in I2C_CR1 register)

Впрочем, когда откроете для себя DMA или хотябы прерывания, появятся новые интересные возможности.

Изменено пользователем EdgeAligned

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если тупо - то конечно. Тупо можно вообще тупо забить.

А ежели по-уму, то можно открыть для себя возможности DMA-передачи и предоставить его логике смотреть за передачей байтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, EdgeAligned said:

Если тупо - то конечно. Тупо можно вообще тупо забить.

А ежели по-уму, то можно открыть для себя возможности DMA-передачи и предоставить его логике смотреть за передачей байтов.

Можно и DMA тупо открыть. Всё от количества тупости зависит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где то видел тему у человека HAL слал без ответа ack, например нужно связаться с уст-во не поддерживающим ack.

Можно конечно програмно написать i2c но это на крайний случай. 

Как раз HAL работает через прерывания типа 

HAL_I2C_MASTER_TRANSMIT_IT

Изменено пользователем whale

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предположу что автор подключает что-то вроде китайского контроллера СД дисплея или клавиатуры с интерфейсом, напоминающим гибрид I2C и SPI, то есть как бы I2C, но без адреса и подтверждения и с растягиванием импульсов. Реализуется ногодрыгом и конечным автоматом, там скорость не нужна. На сайтах ардуинщиков есть исходники, но лучше сделать самому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Без адреса и бита подтверждения - это тот же самый SPI, только с одной линией данных, помеченной SDA. Она может быть как однонаправленной (только к дисплею), так и двунаправленной (на передачу/прием). И SPI может быть 9-битным, когда этот доп. бит используется для переключения типа передаваемых данных. Простые Ардуины не могут в аппаратом модуле SPI передать 9 бит, поэтому и делают программную реализацию. Большинство СТМок имеют аппаратный SPI с настраиваемым числом бит в посылке. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, EdgeAligned сказал:

Без адреса и бита подтверждения - это тот же самый SPI

А еще без START и STOP. ("Не в лотерею, а в очко, не "Волгу", а 25 рублей, не выиграл, а проиграл, а так все сходится").

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...