EEPROM에 데이터 저장하는 코드 구현 중 살짝 곤란했던 사항 정리
(요즘은 MCU Flash 에 바로 저장하니 EEPROM 사용할 일이 크게 없긴 했음.)
1. Write(저장)
1) 예전에는 데이터가 몇 바이트 안되서 그냥 주소 적용하고 btye 저장했는데,
이번에는 한번에 64byte 이상 저장하면서 Page Wirte를 통해 저장함.
2) 이게 처음 16byte 만 저장되고 이후 저장이 안되는 문제 가 있었음.
3) 확인하니 해당 EEPROM 은 최대 16byte 단위로 Page Write만 지원됨.
(EEPROM 종류마다 약간씩 다름.. 265byte 단위로 저장되는 것도 있음)
4) 연속해서 16byte씩 나누어 저장하니 안됨
5) 16byte 저장하고 Ack 확인하던가, 3~4ms 대기(지연)하고 다시 저장해야 정상적으로 처리됨.
- EEPROM 내부 저장시간이 필요.
- 64byte 연속 저장시 4번씩 나누어 저장하면 기본 대기 시간이 10ms 정도 소요됨.
- 실시간 제어 시 해당 지연이 문제되면 대기 시간 동안 다른 처리하도록 구현 필요.
- 아님 256byte 단위 저장되는 Rom으로 변경하던가.
2. 페이지 주소
1) 4-Kbit(512*8) 을 사용했는데 4096Bit 라 512byte 까지 저장됨.
2) 최대 256byte 까지 저장하고 이후 추가로 저장하려고 했는데, 저장이 정상적으로 되지 않음.
3) 저장은 안되는게 아니고 첫 번지에 중복 저장됨. (최대 256byte 만 되는 EEPROM 인줄 의심)
4) 알고 보니 페이지 주소가 장치 주소와 일부 포함되어 사용하여 최대 9bit 로 설정되는 방식.
5) 주소가 256byte 넘어가면 A0~A7, A8도 같이 사용해야 함.
어떤 EEPROM은 기본 페이지 주소 지정이 16byte 단위로 지정해서 저장하는 경우도 있은 것 같음.
하기 링크 코드 보면 ROM 사이즈에 따라 페이지 주소 처리 함.
https://github.com/nimaltd/ee24/blob/master/ee24.c
결론은 각 EEPROM 마다 저장 방식이 약간씩 다르니, 해당 데이터시트를 잘 보자.
'Firmware' 카테고리의 다른 글
CAN 속도 별 전송 frame 개수 (0) | 2023.11.06 |
---|---|
CH32V307VCT6 테스트 / WCH-Link (0) | 2023.03.18 |