본문 바로가기

라즈베리파이

라즈베리파이 EEPROM 제어(SPI 통신)

라즈베리파이의 SPI 통신을 이용하여 EEPROM에 데이터를 저장하고 읽어오는 방법을 파이썬으로 구현해보았습니다.

 

우선 라즈베리파이의 SPI 통신을 이용하여 EEPROM에 데이터를 저장하고 읽어오는 방법을 파이썬으로 구현하기 위해서 사용한 EEPROM에 대해서 간단히 살펴봅시다.

EEPROM은 STMicroelectronics 사의 M93Cx6를 사용하였습니다.

EEPRROM M93Cx6에는 M93C86, M93C76, M93C66, M93C56, M93C46의 device가 있으며 메모리 사이즈가 각각 2048 Bytes, 1024 Bytes, 512 Bytes, 256 Bytes, 128 Bytes로 다르기 때문에 각각의 주소에 접근하는 방식이 조금 다른 것 외에는 모두 동일합니다.

M93Cx6 Memory size
M93Cx6 Memory size versus organization

EEPROM, M93Cx6의 Package는 8 Pin으로 다음과 같습니다. (여기서 7번 Pin DU는 Don't Use로 사용하지 않는 Pin입니다.)

8-pin package
8-pin package connections (top view)

M93Cx6의 각 Pin에 대한 설명은 다음과 같습니다.

Signal name
Signal names

M93Cx6은 ORG(Organization Select)의 상태에 따라서 메모리를 바이트(8-bit Bytes) 또는 워드(16-bit Words)로 구성됩니다. 만약 ORG가 연결이 되어 있지 않거나 Vcc에 연결된 경우에는 워드(16-bit Words)가 선택되며, ORG가 접지(Vss)에 연결되면 바이트(8-bit Bytes)가 선택됩니다.

 

다음은 라즈베리파이에서의 설정 및 회로 구성에 대해서 살펴봅시다.

1. 라즈베리파이의 기본 설정에서 SPI 통신을 Enable

 

2. 라즈베리파이에서 사용할 Pin 선택

라즈베리파이 Pin
라즈베리파이 Pin 선택

※ Vss는 전류가 부족할 수 있으니 반드시 3.3v 대신 5v 사용을 권장합니다.

MOSI : Master Out Slave In, MISO : Master In Slave Out

 

3. 라즈베리파이와 EEPROM의 Pin를 다음과 같이 선으로 연결

회로도

 

 

다음은 파이썬으로 EEPROM에 데이터를 저장하고 읽어오는 코드를 살펴봅시다.

1) 라즈베리파이의 GPIO 제어를 위해서 모듈 import

라즈베리파이 파이썬 코드 01

2) 라즈베리파이의 사용 Pin 지정

라즈베리파이 파이썬 코드 02

3) OPCODE와 Delay time 정의

: Start Bit(1 bit)와 Op code(2 bit)를 붙여서 사용

라즈베리파이 파이썬 코드 03

4) EEPROM별 사이즈와 Address 길이, WEN address를 Dictionary에 정의

라즈베리파이 파이썬 코드 04

5) EEPROM을 Enable, read, write 하는 기능에 대한 함수 작성

각 함수마다 사용하는 eeprom의 모델에 해당하는 Dictionary를 인자로 전달받아서 공용 설계

라즈베리파이 파이썬 코드 05
라즈베리파이 파이썬 코드 06
라즈베리파이 파이썬 코드 07
라즈베리파이 파이썬 코드 08

6) 테스트를 위해 다음과 같이 for문을 이용하여 데이터를 write 하고 read 하여 동작 체크

라즈베리파이 파이썬 코드 09