을 설정하지만 매번 같은 것하지 비트 내가 말할 :STM32 I2C1 시작이 SR1 레지스터 내 I2C EEPROM을 이야기하는 STM32를 프로그램하려고
I2C_GenerateSTART(I2C1, ENABLE);
while(!(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT))); the code hangs here
내가 디버거를 통해 가서 내가 발견 SR1 비트 0 플래그 (시작 비트 생성 플래그)가 설정되지 않아 코드가 정지되는 것입니다. 오실로스코프에서 시작 비트가 생성되었고 이것이 때로는 작동한다는 것을 알 수 있습니다. 그것은 연속적으로 여러 글을 쓰려고 할 때 보통 부서집니다. 나는 HW가 모든 것이 괜찮은지 확인했다. 내가 i2c 버스에서 실행중인 주파수를 확인했다. 24lc1025 eeprom 내에 100Khz이다.
아이디어,
감사
감사합니다. 저는 월요일에이 점을 점검 할 것입니다. 왜냐하면 이것이 STOP 비트가 지워져서 이것이 모든 문제의 근원이 될 수 있는지를 확인하지 않는다는 것을 확실히 압니다. 나는 데이터 시트에서 내가 어떻게 그것을 놓쳤는 지 모른다. – jramirez
상태 레지스터에 없기 때문에 그다지 명백하지 않습니다. 그러나 다시 한번, 하드웨어 레지스터에는 거의 확실하지 않은 것들이 거의 있습니다. 이것이 드라이버가 어려운 이유입니다. –
빠른 업데이트 나는 당신이 말한 것을 시도하고 시작 비트에 대한 문제를 수정했다. 이제 장치가 응답하지 않는 슬레이브 주소를 보낸 후에 다른 것이 있습니다. 이 때 하나의 행운을 시도 할 때 연속으로 두 개의 쓰기를 시도 할 때 작동합니다. 나는 범위를 확인하고 신호가 잘 보입니다. EEprom은 주소가 전송 된 후 응답하지 않습니다. 나는 쓰기 사이에 주소가 변경되지 않았는지 확인했다. 그리고 쓰기 사이에 5ms의 지연을 넣으면 연속 쓰기로 작동한다. 나는 100khz 버스에서이 EEPROM을 실행 중이다. 24lc1025는 1Mhz까지 어떤 아이디어도 낼 수있다. – jramirez