2017-12-18 32 views
0

Simplicity Studio 및 Silabs EFM8BB3 (8051 기반 SoC)에서 작업하는 동안, 매우 느린 전송 속도와 그 사이에 큰 일시 중지 (최대 60ms)가 관찰됩니다 각 바이트 전송 및 smbus 마스터 인터페이스를 통한 i2c 프로토콜의 전체 메시지 간 (최대 160ms).Silabs efm8bb3은 smbus/i2c 마스터 전송시 매우 느립니다.

왜 전송 속도가 느리며 해결할 수있는 방법이 있습니까?

답변

1

이 문제는 SCL 지연/시간 제한 인식 (데이터 시트에 설명되어 있지 않음)에만 책임이있는 다른 타이머를 활성화하여 해결됩니다. Silabs EFM8BB3 칩셋 타이머 T2에는 i2c 데이터 스트림 전송 변조를 제공하는 역할이 있습니다. 타이머 T3에는 i2c SCL 타임 아웃 처리 기능을 제공하는 역할이 있습니다. 바이트 사이에서 일시 중지를 줄일 수 있으려면 T3을 사용해야합니다. T3은 낮은 바이트 인터럽트가 활성화 된 two timers, 8-bit auto reload 모드로 구성되어야합니다. T3 하위 바이트 오버플로 주파수는 400KHz i2c 전송 속도 인 경우 50000 (reload value is 215)으로 설정해야합니다. 단순화 된 인터럽트 처리기 (인터럽트 플래그를 삭제하는 것)가 구현되어야합니다. T3 상위 바이트 오버플로 주파수는 사용 가능한 가장 낮은 숫자 인 8000 (reload value is 1)으로 설정할 수 있습니다. SMBUS 인터페이스 엔터티를 활성화하려면 Enable SMBus SCL Timeout Detection이 필요합니다.

+1

주의 : SILABS는 적절한 Timer3 SYSCLK 구성을 잃어 버리고 대신 EXTCLK를 강제 실행하여 "2017 Christmas present"버그를 발표했습니다. post-init config를 사용하여 Timer3를 내부 CLK의 사용으로 되돌립니다. 'SFRPAGE = 0x00; \t CKCON0 = CKCON0_SCA__SYSCLK_DIV_12 | CKCON0_T0M__PRESCALE \t \t \t | CKCON0_T2MH__SYSCLK | CKCON0_T2ML__SYSCLK \t \t \t | CKCON0_T3MH__EXTERNAL_CLOCK | CKCON0_T3ML__SYSCLK \t \t \t | CKCON0_T1M__SYSCLK; –