Arduino EEPROM을 사용하여 전원 주기 사이에 데이터를 저장하는 방법

Arduino EEPROM을 사용하여 전원 주기 사이에 데이터를 저장하는 방법

Arduino가 꺼져있을 때 데이터를 저장할 수 있다는 것을 알고 계셨습니까? 플래시 메모리에 저장된 스케치가 아닙니다. EEPROM의 변수 데이터에 대해 이야기하고 있습니다. 내가 읽고 쓰는 방법과 프로젝트에 무엇을 할 수 있는지 보여줄 때 저와 함께하십시오.





Arduino를 처음 사용하는 경우 다음을 확인하십시오. 초보자 가이드 .





EEPROM이란 무엇입니까?

EEPROM은 전기적으로 지울 수 있는 프로그램 가능한 읽기 전용 메모리 . 일종의 비휘발성 메모리입니다. 그것이 무엇을 의미하는지 이해하지 못하더라도 걱정하지 마십시오. 전원이 제거된 상태에서도 데이터를 단순히 저장합니다. , 데이터를 유지하려면 전기가 필요함).





EEPROM은 Matrix Creator Pi HAT에 사용되는 FPGA(Field-Programmable Gate Array)와 같은 수많은 프로세서에 내장되어 있습니다. 모든 Arduino에는 EEPROM을 사용할 수 있지만 용량은 모델에 따라 다릅니다. 각 보드에 대한 자세한 내용은 구매 가이드를 확인하세요.

어떻게 작동합니까?

EEPROM은 다음을 사용하여 전기적으로 지워지고 프로그래밍됩니다. Fowler-Nordheim 터널링 . 당신은 그것을 사용하기 위해 기술적인 세부 사항을 알 필요가 없습니다. 기본 전제는 전기가 바이너리 데이터(바이너리)를 변경하는 데 사용된다는 것입니다. 전자적으로 읽고, 지우고, 다시 쓸 수 있습니다.



다행히도 아두이노 언어 컴퓨터 과학 학위 없이도 데이터를 쉽게 변경할 수 있습니다.

기대 수명

Arduino에서 EEPROM을 사용하는 것은 쉽지만 수명이 제한되어 있습니다. EEPROM은 100,000 읽기/지우기 주기를 처리하도록 지정됩니다. 즉, EEPROM이 불안정해지기 전에 데이터를 100,000번 쓴 다음 지우거나 다시 쓸 수 있습니다. 실제로, 아트멜 (Arduino 'Chip' 제조업체) 반도체는 각 프로세서의 허용 오차에 따라 더 많거나 더 적은 수의 사이클을 처리할 수 있습니다.





위치를 너무 많이 쓰고 지우면 신뢰할 수 없게 될 수 있습니다. 올바른 데이터를 반환하지 않거나 인접 비트의 값을 반환하지 않을 수 있습니다.

이것은 쓰기가 많은 것처럼 들릴 수 있지만 프로그래밍 방식으로 읽고 쓰는 경우 이 한계에 쉽게 도달할 수 있습니다( 고리 , 예를 들어). 데이터를 읽어도 실리콘이 열화되지 않으며, 쓰기만 한다 . 두려움 없이 원하는 만큼 EEPROM에서 데이터를 읽을 수 있습니다!





이 제한은 각 메모리 위치에 적용된다는 점에 유의하는 것이 중요합니다. Arduino는 EEPROM에서 사용할 수 있는 메모리 위치가 1,000개 이상일 수 있으므로 한 위치에 너무 많이 쓰는 경우 해당 위치만 영향을 받고 다른 위치는 영향을 받지 않습니다. 나중에 토론하겠습니다. 웨어 레벨링 , SSD가 사용하는 데이터를 균등하게 분배하여 EEPROM 마모를 줄일 수 있습니다.

무엇에 유용합니까?

EEPROM은 Arduino 프로젝트에 매우 유용합니다. 전원이 제거되어도 데이터를 기억하므로 아두이노의 상태를 저장할 수 있습니다. 위치나 '탄약'이 얼마나 남았는지 기억하는 레이저 포탑을 만들 수 있습니다. 이를 사용하여 기기를 제어하고 기기가 활성화된 횟수를 기록할 수 있습니다.

EEPROM은 설정이나 고득점에 가장 적합합니다. 복잡한 데이터를 정기적으로 작성하려면 이더넷 실드(SD 슬롯이 내장됨) 또는 Raspberry Pi를 고려하십시오.

읽고 쓰기

이론은 끝났으니 이제 데이터를 읽고 쓰는 방법을 살펴보겠습니다! 먼저 라이브러리를 포함합니다(Arduino IDE와 함께 제공됨).

#include

이제 데이터를 작성하십시오.

EEPROM.write(0, 12);

이것은 숫자를 씁니다 12 EEPROM 위치로 0 . 각 쓰기에는 3.3밀리초( ms , 1000ms = 1초). 어떻게 글자를 쓸 수 없는지 주목하십시오( ), 0에서 255 사이의 숫자만 허용됩니다. 이것이 EEPROM이 설정이나 높은 점수에 이상적이지만 플레이어 이름이나 단어에는 좋지 않은 이유입니다. 이 방법을 사용하여 텍스트를 저장할 수 있지만(알파벳의 각 문자를 숫자로 매핑할 수 있음) 여러 메모리 위치가 필요합니다. 각 문자에 대해 하나의 위치가 필요합니다.

해당 데이터를 읽는 방법은 다음과 같습니다.

오래된 문자 메시지를 찾는 방법
EEPROM.read(0);

0은 이전에 쓴 주소입니다. 이전에 주소에 쓰지 않은 경우 최대값( 255 ).

조금 더 유용한 방법이 있습니다. 소수점 이하 자릿수 또는 문자열을 저장하고 싶다고 가정해 보겠습니다.

EEPROM.put(2,'12.67');

이렇게 하면 데이터를 여러 위치에 씁니다. 직접 쓰기는 쉽지만 그만큼 편리합니다. 이것이 얼마나 많은 위치에 기록되었는지 계속 추적해야 하므로 실수로 데이터를 덮어쓰는 일이 없습니다! 당신은 사용해야합니다 가져 오기 이 데이터를 다시 검색하는 방법:

float f = 0.00f;
EEPROM.get(2, f);

get의 값은 float에 저장됩니다. NS 변하기 쉬운. 이것이 어떻게 초기화되는지 주목하십시오 0.00f 값으로. NS NS 컴파일러가 이 변수에 많은 수를 저장하고 싶을 수 있음을 알게 하여 컴파일하는 동안 몇 가지 추가 구성을 설정합니다.

NS EEPROM 문서아두이노 웹사이트 더 많은 예가 있습니다.

웨어 레벨링

웨어 레벨링은 EEPROM의 마모를 줄이고 수명을 늘리는 데 사용되는 기술입니다. 소규모 프로젝트에서만 작업하는 경우에는 이에 대해 걱정할 필요가 없습니다.

EEPROM 수명을 유지하기 위해 할 수 있는 가장 간단한 방법은 쓰기를 특정 위치로 제한하는 것입니다. 주소를 먼저 읽어서 이를 수행할 수 있으며, 쓰고자 하는 값이 이미 있는 경우 다시 쓸 필요가 없습니다(데이터를 읽어도 해가 없음을 기억하십시오). 이렇게 하는 방법은 다음과 같습니다.

int safeWrite(int data, address) {
if(EEPROM.read(address) != data) {
EEPROM.write(address, data);
}
}

이것은 아주 간단한 코드이지만 정수에 대해서만 작동합니다! 바퀴를 다시 발명하는 대신 Arduino EEPROM 라이브러리에 내장된 기능을 사용하십시오.

EEPROM.update(address, val);

이 메서드는 서명과 정확히 동일합니다. 쓰다 필요한 쓰기 횟수를 크게 줄일 수 있지만!

많은 양의 데이터를 작성해야 하고 실리콘이 마모되는 것이 염려되는 경우 더 많은 데이터를 사용하지만 얼마나 많은 쓰기를 수행하는지 추적할 수 있습니다. 다음은 대략적인 구현입니다. 의사 코드 :

var address = 0
var writeCount = 0
if(writeCount > 75,000)
writeCount = 0
address += 1
EEPROM.write(address, data)

EEPROM에 주소와 writeCount를 저장해야 합니다(그리고 writeCount는 주소 위치에 걸쳐 분할되어야 함). 대부분의 경우 이 수준의 보호는 필요하지 않습니다. Arduinos도 너무 저렴하므로 백업을 구입하는 것이 더 쉬울 수 있습니다!

이제 멋진 프로젝트를 만들 수 있을 만큼 충분히 알고 있어야 합니다. 멋진 것을 만들면 알려주세요! 사진에 있는 모든 장치를 인식할 수 있습니까? 아래에 의견을 남겨주세요!

공유하다 공유하다 트위터 이메일 VirtualBox Linux 시스템을 강화하기 위한 5가지 팁

가상 머신이 제공하는 열악한 성능에 지쳤습니까? VirtualBox 성능을 높이려면 다음을 수행해야 합니다.

다음 읽기
관련 항목
  • DIY
  • 아두이노
  • 전자제품
저자 소개 조 코번(136건의 출판물)

Joe는 영국 링컨 대학교에서 컴퓨터 공학을 전공했습니다. 그는 전문 소프트웨어 개발자이며 드론을 날리거나 작곡을 하지 않을 때 종종 사진을 찍거나 동영상을 제작하는 모습을 볼 수 있습니다.

조 코번이 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.