라즈베리 파이 피코는 자체적으로 EEPROM을 내장하고 있지 않기 때문에 피코의 플래시메모리를 활용하여 EEPROM과 같은 역할을 수행할 수 있도록 하는 방법을 알아보고자 합니다.
EEPROM은 반영구적인 저장소로, 전기가 끊어져도 그 내용이 지워지지 않고 보존됩니다. 플래시메모리도 비슷한 방식으로 데이터를 저장할 수 있어서 EEPROM처럼 비휘발성 저장소로 사용될 수 있습니다. 하지만 EEPROM과는 다르게, 플래시메모리에 데이터를 쓰기 위해서는 이전 데이터를 먼저 삭제해야 하므로, 덮어쓰기 작업에 따른 성능 저하가 있을 수 있습니다. 또한, 일반적으로 EEPROM보다는 쓰기/삭제 주기 수가 낮기 때문에 플래시메모리의 사용 조건과 명세를 지켜야 합니다.
피코의 플래시 메모리의 경우 100,000회 이상의 지움/쓰기 주기를 제공하는 것으로 알려져 있습니다. 이는 대부분의 응용 프로그램에서 충분한 수명을 제공합니다. 단, 사용자가 과도하게 지움/쓰기를 하는 경우, 수명이 짧아질 수 있습니다.
아래의 코드는 피코에서 16비트 변수가 가지고 있는 값을 플래시메모리에 저장하고 다시 읽어내어 출력하는 예제입니다.
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/bootrom.h"
// Define the flash memory address where we want to store our data
#define FLASH_ADDRESS 0x10000
// Define a struct to hold our 16-bit variable
typedef struct {
uint16_t data;
} FlashData;
int main() {
// Initialize the standard library functions
stdio_init_all();
// Create a FlashData struct and set its value
FlashData data = { 0xABCD };
// Erase the flash page that contains our data
flash_range_erase(FLASH_ADDRESS, sizeof(data));
// Write our data to the flash memory
flash_range_program(FLASH_ADDRESS, &data, sizeof(data));
// Read our data from the flash memory
FlashData read_data;
memcpy(&read_data, (void *)FLASH_ADDRESS, sizeof(read_data));
// Print out the value we read from the flash memory
printf("Data: 0x%04X\n", read_data.data);
return 0;
}
위 코드에서는 먼저, 플래시 메모리에 저장할 변수를 담을 구조체 FlashData를 정의합니다. 이 구조체에는 uint16_t 타입의 data 필드가 하나 있습니다.
그리고 main() 함수에서는 다음과 같은 작업을 수행합니다.
- 표준 라이브러리 함수를 초기화합니다.
- FlashData 구조체 변수 data를 생성하고, 0xABCD 값을 설정합니다.
- 플래시 메모리에 저장할 data 변수의 위치를 지우고, 해당 위치에 data 변수를 저장합니다.
- 플래시 메모리에서 데이터를 읽어와 read_data 변수에 저장합니다.
- 읽어온 데이터를 출력합니다.
플래시 메모리에 데이터를 쓸 때는 먼저 해당 위치를 지우고, 그 위치에 데이터를 씁니다. 이 코드에서는 flash_range_erase() 함수를 사용하여 데이터가 저장될 위치를 지우고, flash_range_program() 함수를 사용하여 데이터를 씁니다.
읽어올 때는 단순히 데이터가 저장된 위치를 읽어오면 됩니다. 이 코드에서는 memcpy() 함수를 사용하여 플래시 메모리에서 읽어온 데이터를 read_data 변수에 복사합니다.
'라즈베리파이 피코' 카테고리의 다른 글
라즈베리파이 피코 카운터 사용 C코드 예제 - 인터럽트활용 (0) | 2023.02.15 |
---|---|
만일 라즈베리파이 피코에 연결한 i2c lcd가 느리게 작동한다면.. (0) | 2023.02.13 |
라즈베리파이 피코를 처음 사용하면서 초보자가 느낀 점 (0) | 2023.02.13 |
라즈베리파이 피코 피에조 부저 소리 변환 (2) | 2023.02.13 |
댓글