본문 바로가기

개발자/라즈베리파이4

라즈베리파이 spi & i2c 동시에 사용 문제?

 

 

아직 확인은 안 한 상태인데 문제가 있는 듯 보여서 일단 기사는 캡쳐

 

  • 감지 모자 (astro-pi)는 MCU (또는 AVR이라고도 함)와 통신하는 데 SPI를 사용하고 압력 센서, 온도 / 습도 센서 및 가속도계 / 자이로 스코프 / 자 기계와 통신하려면 I2C를 사용합니다. 이를 위해 헤더 파일, 문서화 지원 및 테스트 / 예제 프로그램 세트를 개발 중입니다. http://experix.sourceforge.net 의 다운로드 섹션, my-hat 디렉토리 에서 찾을 수 있습니다 . (지금 거기에 몇 가지 오류가 있으며 수정 및 온도 측정 예제를 게시 할 준비를하고 있습니다.)
  • SPI 및 I2C 클록 속도는 독립적이며 실제 전송은 전용 하드웨어에서 처리됩니다. 별도의 스레드를 실행하더라도 차이가 없습니다.
  • 내 파이에서 똑같은 작업을 시도하고 있지만 SPI를 실행하는 동안 I2C가 올바르게 실행되는 데 문제가 있습니다. SPI 및 I2C 인터페이스를 실행하는 클럭 속도는 얼마입니까? 각 인터페이스가 별도의 스레드 또는 실행 파일에서 실행됩니까? 하나의 장치에 대해 8Mhz에서 SPI 인터페이스를 실행해야하지만 I2C 장치는 기본 100kHz로 클럭 된 상태로 둡니다. SPI 및 I2C 클록 속도는 독립적이며 실제 전송은 전용 하드웨어에서 처리됩니다. 별도의 스레드를 실행하더라도 차이가 없습니다.
  • 그것이 내가 생각했던 것입니다. 그러나 두 실행 파일을 동시에 실행하면 I2C 판독 값이 지옥으로 이동하기 때문에 확신 할 수 없었습니다. SPI 및 I2C 실행 파일을 동시에 실행하지 않고 독립적으로 실행하면 완벽하게 실행됩니다 (데이터 손상없이 구성된 속도로 데이터 읽기). 그러나 I2C 실행 파일을 먼저 시작한 다음 SPI 실행 파일을 시작하면 I2C 판독 값이 손상되거나 전혀 전달되지 않습니다. 하지만 SPI 수치는 잘 나온다. 그래서 누구도 이것을 경험했는지 알아 보려고했습니다.
  • 안녕하세요, 같은 문제가 있습니다. I2C 1에서 LCD를 사용하고 SPI에서 ATtiny85를 사용하고 있지만 SPI를 사용할 때 I2C가 작동을 멈 춥니 다. 

 

해결방안으로 보이는 것은 스레드 잠금으로 해결

 

  • 나는 여러 스레드가 SPI와 통신하는 통신에서 스레딩 잠금을 사용하여 간헐적 인 바핑을 정리했습니다. 읽기 또는 쓰기 기능은 잠금을 잡고 spi를 열고 읽기 또는 쓰기를 수행 한 다음 잠금을 닫고 해제합니다. 
spi_lock=threading.Lock()


def readx():
  values=None
  with spi_lock:
      spi.open(...
      values=spi.xfer(...
      spi.close(...
  return values

 

 

토론 글타래의 출처 링크 참고

 

 

 

라즈베리파이 IO Interface Module Test

 

 

 

더욱 좋은 정보를 제공하겠습니다.~ ^^

이 글 공유하기

facebook twitter kakaoTalk kakaostory naver band