Como identificar Final de gravação i2c

Software e Hardware para uC STM

Moderadores: andre_luis, 51

Como identificar Final de gravação i2c

Mensagempor Guri » 20 Out 2019 17:14

Eu liguei uma e2prom do tipo 24c256 no módulo i2c do stm32f103, ajustei a taxa para 100khz, não estou utilizando interrupção, e uso o módulo i2c do arm para controlar a memória externa.

Funciona tudo beleza. Eu quero fazer é o seguinte e não estou conseguindo raciocinar a respeito e peço ajuda.

Para se gravar um byte na e2prom externa eu necessito aguardar um time de 5ms entre uma gravação e outra, até ai tudo beleza, funciona redondo.

Eu quero saber se existe algum bit no módulo i2c do arm que me avisa se a gravação na e2prom externa terminou, assim eu não precisaria ficar aguardando um delay de 5ms entre uma gravação e outra.

Nos mcus pic eu sei que tem esse flag (agora não me lembro o nome), mas sei que existe e já até utilizei a anos atrás isso.

Alguém pode me ajudar :D
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Como identificar Final de gravação i2c

Mensagempor vtrx » 20 Out 2019 18:01

Posta a rotina de gravação que esta usando.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: Como identificar Final de gravação i2c

Mensagempor eliveltonpsantos » 20 Out 2019 19:33

Não é exatamente o que você quer, mas uma alternativa é, após a gravação, eu entro num loop fazendo um pooling de leitura de uma determinada posição da EEPROM; caso me retorne erro (EEPROM_Read() != HAL_OK), significa que a EEPROM está ocupada fazendo a gravação, caso retorno um byte com o ACK (EEPROM_Read == HAL_OK) então a EEPROM está disponível para novos comandos.
eliveltonpsantos
Bit
 
Mensagens: 40
Registrado em: 30 Jun 2017 09:14

Re: Como identificar Final de gravação i2c

Mensagempor ze » 21 Out 2019 10:27

Vc pode também esperar a eeprom liberar a linha antes de gravar. Algo como
Código: Selecionar todos
writeeeprom(a,d)
{
while(!ACK());
eepromwrite(a,d);
}
Pra criar a função ACK() veja no ds do seu mc como o hw dele trata a condição ACK. Geralmente é só um bit (seu flag) de um registro I2C qualquer.
Perceba que se a eeprom ausente ou falha, deve travar. Neste caso, algo como um timeout deve resolver
Código: Selecionar todos
tmout=1000
while((!ACK()&&tmout--));
if (!tmout) return FALHA;


Outra alternativa pra agilizar ainda + é vc ver no d.s. - desta vez o da eeprom - como é gravada uma página - geralmente 64 bytes sequenciais. O próprio hw da eeprom incrementa o endereço.
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: Como identificar Final de gravação i2c

Mensagempor Guri » 23 Out 2019 10:28

Agradeço as dicas dos amigos.

Vou estudar sobre as sugestões e ver se consigo entender direitinho
Peço desculpas pela demora no retorno,

Obrigado :)
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Como identificar Final de gravação i2c

Mensagempor barboza » 23 Out 2019 21:55

ze escreveu:Vc pode também esperar a eeprom liberar a linha antes de gravar. Algo como
Código: Selecionar todos
writeeeprom(a,d)
{
while(!ACK());
eepromwrite(a,d);
}
Pra criar a função ACK() veja no ds do seu mc como o hw dele trata a condição ACK. Geralmente é só um bit (seu flag) de um registro I2C qualquer.
Perceba que se a eeprom ausente ou falha, deve travar. Neste caso, algo como um timeout deve resolver
Código: Selecionar todos
tmout=1000
while((!ACK()&&tmout--));
if (!tmout) return FALHA;


Outra alternativa pra agilizar ainda + é vc ver no d.s. - desta vez o da eeprom - como é gravada uma página - geralmente 64 bytes sequenciais. O próprio hw da eeprom incrementa o endereço.


Normalmente uso essa técnica do polling antes de uma nova gravação e também o recurso de gravação em páginas.
Ia sugerir o mesmo.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar


Voltar para STMicroelectronics

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x