본문 바로가기
기타_모아/자료실

[EEPROM] I2C Write / M24M01 Source

by KANG Stroy 2020. 9. 20.
728x90
728x90

ST chip의 EEPROM 인 M24M01-R의 READ/WRITE 관련 되어서 자료를 정리 합니다. 

 

 

https://gangsanilee.tistory.com/2921  / I2C의 기본 Spec을 보기 원하신다면 링크를 따라가 주세요. 

 

[I2C] I2C-bus specification and user manual

I2C-bus specification and user manual 관련 문서를 첨부하였어요. 2 wire 통신 방식입니다. Address를 지정하고 8bit는 Read와 Write를 할 것인지를 정합니다. Read 하면서 Write를 할 수 없죠. 보내고 읽는다. 아니면

gangsanilee.tistory.com

 

칩 간단한 기능 설명

위의 그림에서 1Mbit  ( 128 K byte ) 

Page Size는 256 K byte가 됩니다. 
뭘 이런걸 설명하나 싶겠죠? 
다음에 설명하기 위한 부분 입니다. 
128 K byte를 계산기를 이용해서 바이트로 보겠습니다. 
128 * 1024 (1k Byte) = 131,072 ?? 
난 암산을 하지 않았다. 계산기를 이용했다. 한장의 사진이 더 많은 효과를 낸다고 한다. 
HEX는 이렇게 늘려 보았다. 
00 02 00 00 은 ( 32 byte가 된다 ) 
00 00 은 16 Byte 가 된다. 너무 쉬운것을 길거 늘리고 늘린거 같다. 정답만 말해 버리고 빠져 버릴까?라는 고민도 해본다. 그냥 고민만 한다. 
I2C WRITE 

 EEPROM에 저장 될 수 있는 부분을 보았다. 바이트로는 131,072 만큼 비트로는 1Mbit로 저장 할 수 있다. 비트 단위로 저장을 한다면 1Mbit까지 저장 할 수 있다. 

 
I2C로 쓰려고 합니다.  
 

아래 그림은 규약이다. 난 이렇게 쓰고 싶지 않습니다. 그래요 쓰고 싶지 않으면 쓰지 말아야지요. 하지만 규약을 어기면 EEPROM과 대화를 할 수가 없습니다. EEPROM과 대화를 하기 위해서 우리는 이 친구가 알수 있는 말로 대화를 시도 합니다. 

 

 

디바이스를 셋팅 합니다. 그리고 Byte Address를 상위 비트 하위 비트로 나누어 메세지를 전송 합니다. 

 

여기서 하나 16Byte는 0xFFFF 입니다. 

그러나 우리의 칩은 0x01 0000 입니다. 16Byte를 넘어 섭니다. 이 말을 하고 싶어서 이 많은 말을 한거 같내요. 그럼 어드레스를 늘려서 가면 되지 않나? 그럼 대화를 할수가 없죠. 그래서 Dev Sel에 메세지를 전합니다. 나 상위에 저장하고 싶어. 

 

 

소스 상으로는 이렇게 되는 겁니다. 

  //configure slave address, page select bit and read/write# bit

if(mem_addr >= 0x10000)

{     //memory address points to 10000h to 1FFFFh

    device_addr_write = 

EEPROM_SLAVE_DEV0_ADDR | EEPROM_PAGE_SELECT_H | EEPROM_WRITE_TO_SLAVE;  



}else

{ //memory address points to 00000h to 0FFFFh

    device_addr_write = 

EEPROM_SLAVE_DEV0_ADDR | EEPROM_PAGE_SELECT_L | EEPROM_WRITE_TO_SLAVE;  

  }

여기서 define된 부분을 보겠습니다. 

#define EEPROM_SLAVE_DEV0_ADDR    0xA0

//10000h to 1FFFFh (17-bit memory address) - P/S bit set to High (MSB)

#define EEPROM_PAGE_SELECT_H      0x02

 

//00000h to 0FFFFh (17-bit memory address) - P/s bit set to Low (MSB)
#define EEPROM_PAGE_SELECT_L      0x00

 

 #define EEPROM_WRITE_TO_SLAVE     0x00
#define EEPROM_READ_FROM_SLAVE    0x01

칩의 어드레스는 0xA0이 됩니다. 

그리고 상위 어드레스에 저장을 하기 위해서는 추가적으로 

0xA2 이라고 추가 합니다. 

 

비트로 나눈다면 

 

1010 00 1x

x 는 쓰기는 0 읽기는 1이 됩니다. 

 

16byte 주소까지는 0xA0으로 메세지를 주고 받다가 32Byte가 넘어가는 순간부터 0xA2가 되면서 쓰기가 되는 겁니다. 읽기는 마지막 하위 비트를 1로 셋팅하면서 동작 됩니다. 

 

PDF는 업데이트 될 수도 있으니, 조금 이상하게 동작 된다면 ST 를 들어가 새로 나온 파일을 다운받아서 보시길 바랍니다. 

 

EEPROM_128Kbyte_m24m01-r.pdf
다운로드

 

M24M01_I2C_EEPROM-master.zip
다운로드

 

728x90

댓글