Skip to content

Công nghệ 9 giây

“Website hướng dẫn, thử nghiệm và giải thích công nghệ theo cách dễ hiểu cho mọi người.”

Menu
  • Home
  • Công nghệ
  • STM32
  • ESP32
  • Altium Desinger
  • Kiến thức điện máy
Menu

Có cách nào để có thể copy nội dung một EEPROM này rồi ghi vào một EEPROM khác hay không?

Posted on August 14, 2026 by congnghe9s

Có. Hoàn toàn có thể copy toàn bộ nội dung từ một EEPROM sang một EEPROM khác, miễn là hai EEPROM tương thích về giao tiếp và dung lượng.

Với dự án Arduino của bạn, cách này đặc biệt phù hợp vì bạn đang dùng AT24C32 (4 KB, I²C) trên module DS1307.

1. Nguyên lý

Ta có:

EEPROM nguồn → Arduino đọc từng byte → RAM/buffer → EEPROM đích ghi từng byte

Ví dụ:

AT24C32 nguồn
     │
     │ I²C
     ▼
 Arduino UNO
     │
     │ I²C
     ▼
AT24C32 đích

Arduino không nhất thiết phải có đủ RAM để chứa toàn bộ EEPROM. Với AT24C32 có 4096 byte, ta có thể copy theo từng byte hoặc từng block nhỏ.


2. Nếu hai EEPROM đều là AT24C32

Đây là trường hợp dễ nhất.

Có một vấn đề quan trọng: hai AT24C32 không thể cùng nằm trên bus I²C với cùng địa chỉ 0x50.

Có vài cách giải quyết:

Cách A — dùng hai bus I²C

Ví dụ:

Arduino
 ├── I²C bus 1 → EEPROM nguồn
 └── I²C bus 2 → EEPROM đích

Cách B — đọc EEPROM nguồn ra trước, sau đó tháo nguồn và thay bằng EEPROM đích

Cách này đơn giản nhưng không thể copy trực tiếp trong một lần chạy nếu chỉ có một bus.

Cách C — thay đổi địa chỉ I²C của một EEPROM

AT24C32 thường có các chân A0/A1/A2. Tùy module, có thể cấu hình địa chỉ:

EEPROM nguồn → 0x50
EEPROM đích  → 0x51

Khi đó cả hai có thể hoạt động đồng thời:

              ┌── AT24C32 nguồn (0x50)
Arduino I²C ──┤
              └── AT24C32 đích  (0x51)

Đây là cách tôi khuyên dùng nếu bạn muốn làm máy sao chép EEPROM.


3. Không chỉ copy dữ liệu — có thể copy “nguyên con”

Ví dụ EEPROM nguồn chứa:

0000: 12 34 56 78 ...
0100: A5 7F 20 01 ...
0200: FF FF FF FF ...
...
0FFF: 55 AA 12 34

Ta có thể tạo một chương trình:

READ 0x0000 → 0x0FFF
        ↓
WRITE 0x0000 → 0x0FFF

Sau đó kiểm tra lại:

EEPROM nguồn == EEPROM đích
        ↓
      VERIFY
        ↓
   COPY SUCCESS

Tức là không chỉ copy các vùng dữ liệu mà copy toàn bộ 4096 byte, kể cả những byte FF.


4. Có thể làm thành một “EEPROM Copier” chuyên dụng

Nếu bạn muốn làm một thiết bị thực tế, tôi nghĩ đây là một dự án khá hay:

              ┌─────────────────┐
              │    Arduino UNO  │
              │                 │
              │   EEPROM COPY   │
              └───────┬─────────┘
                      │
             ┌────────┴────────┐
             │                 │
       EEPROM SOURCE     EEPROM TARGET
          AT24C32            AT24C32
           0x50                0x51

LCD 1602 có thể hiển thị:

EEPROM COPIER

READING...
1256 / 4096

sau đó:

WRITING...

4096 / 4096

và cuối cùng:

VERIFY OK

COPY COMPLETE

Thậm chí có thể thêm:

  • READ – đọc EEPROM
  • COPY – sao chép
  • VERIFY – so sánh
  • ERASE – xóa về 0xFF
  • DUMP – xem dữ liệu HEX
  • Hiển thị % tiến trình
  • Báo lỗi tại địa chỉ cụ thể
  • Copy chỉ một vùng, ví dụ 0x0800–0x0FFF

5. Đặc biệt hữu ích với DigitalClock của bạn

Trong firmware DigitalClock của bạn, EEPROM AT24C32 đang chứa các thông tin như scheduler, manual override và các cấu hình khác.

Ta hoàn toàn có thể tạo chức năng:

EEPROM BACKUP
       ↓
Đọc AT24C32
       ↓
EEPROM khác
       ↓
RESTORE

Ví dụ bạn có:

CLOCK #1
AT24C32
  └── 190 events
  └── Manual Override
  └── Settings

có thể sao chép sang:

CLOCK #2
AT24C32

và đồng hồ #2 sẽ nhận toàn bộ dữ liệu cấu hình của #1.

Thậm chí không cần biết trước cấu trúc dữ liệu bên trong EEPROM nếu mục tiêu là sao chép nguyên byte 0 → 4095.

Nếu bạn muốn, tôi có thể hướng dẫn bạn làm một bộ “EEPROM COPIER” bằng Arduino UNO + 2 AT24C32 + LCD 1602, trong đó có nút COPY / VERIFY, và viết luôn code hoàn chỉnh theo đúng thư viện EEPROM24C32.h/.cpp mà bạn đang sử dụng.

Có trường hợp nào eeprom lại có cơ chế bảo vệ chống sao chép không

Có — nhưng cần phân biệt “không cho ghi” với “không cho đọc”. EEPROM thông thường như AT24C32 gần như không có cơ chế chống sao chép dữ liệu theo nghĩa bảo mật.

1. EEPROM thông thường: thường đọc được toàn bộ

Ví dụ AT24C32 có thể có cơ chế Write Protect (WP):

              AT24C32
                 │
        ┌────────┴────────┐
        │                 │
      READ              WRITE
        │                 │
      OK          WP có thể chặn

Nếu chân WP được kích hoạt, EEPROM có thể không cho ghi, nhưng dữ liệu vẫn thường đọc được.

Vì vậy:

WP ≠ chống sao chép.

Nếu bạn đọc được toàn bộ 4096 byte của AT24C32 thì về nguyên tắc có thể ghi chúng sang một AT24C32 khác.


2. Nhưng có những EEPROM/IC có bảo mật

Một số bộ nhớ hoặc IC hiện đại có thể có:

  • vùng nhớ chỉ đọc
  • khóa ghi
  • khóa đọc
  • mật khẩu
  • vùng OTP (One-Time Programmable)
  • mã hóa dữ liệu
  • secure element
  • authentication/challenge-response
  • khóa phần cứng hoặc khóa được lưu trong chip

Khi đó việc:

READ → DUMP → WRITE → CLONE

có thể không thực hiện được, hoặc copy được dữ liệu nhưng thiết bị đích vẫn không hoạt động.


3. Một trường hợp rất đáng chú ý

Có những thiết bị không thực sự “chống đọc EEPROM”, mà chống sao chép ở tầng hệ thống.

Ví dụ:

EEPROM
   ↓
chứa Serial Number
   ↓
MCU đọc Serial Number
   ↓
kiểm tra chữ ký / checksum / mã xác thực
   ↓
Nếu hợp lệ → cho thiết bị hoạt động

Bạn có thể copy 100% EEPROM, nhưng thiết bị vẫn có thể phát hiện:

EEPROM COPY → ❌

vì còn có thông tin khác liên quan đến:

  • MCU
  • serial number
  • MAC address
  • secure key
  • OTP
  • chip ID
  • mã xác thực

4. Với AT24C32 của module DS1307 của bạn

Trường hợp này thì khá đơn giản.

AT24C32 thông thường không phải secure EEPROM.

Nếu bạn có:

AT24C32 #1
0x0000 ───────── 0x0FFF

và có thể đọc được:

0000: XX XX XX XX ...
0004: XX XX XX XX ...
...
0FFC: XX XX XX XX

thì về cơ bản bạn có thể dump toàn bộ 4096 byte và ghi sang AT24C32 #2.

Điều thú vị là chúng ta có thể làm một chương trình kiểm tra xem một EEPROM có thực sự bị bảo vệ hay không:

READ TEST
    ↓
0x0000
0x0001
...
0x0FFF
    ↓
Có byte nào đọc thất bại?
    ↓
YES → kiểm tra cơ chế bảo vệ
NO  → EEPROM có thể dump

Sau đó chạy thêm VERIFY để đảm bảo bản sao giống từng byte.

Nếu bạn muốn, tôi có thể chỉ cho bạn cách nhận biết một EEPROM bất kỳ là loại thường, có WP, OTP hay loại có cơ chế bảo mật, kể cả trường hợp không biết chính xác mã IC.

 

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Bạn có thể hướng dẫn tôi quy trình sửa chữa một mainboard laptop cũng như mainboard của máy tính để bàn không?
  • Có những mức nguồn DC nào trên một bo mạch mainboard laptop?Kỹ thuật đốt dòng để kiểm tra nguồn laptop được thực hiện như thế nào?
  • bài tiếp theo hợp lý là: BÀI 63 – SENSOR FUSION THỰC CHIẾN: ENCODER + IMU MPU6050 + EKF + ODOMETRY X,Y,θ TRÊN STM32F103
  • BÀI 62 – EKF (EXTENDED KALMAN FILTER) CHO ROBOT 2 BÁNH: FUSION ENCODER + IMU + ƯỚC LƯỢNG X, Y, θ, V, ω
  • BÀI 61 – KALMAN FILTER CHO ENCODER + IMU: ƯỚC LƯỢNG TỐC ĐỘ, GÓC θ VÀ SENSOR FUSION

Recent Comments

No comments to show.

Archives

  • September 2026
  • August 2026
  • July 2026
  • June 2026
  • May 2026
  • February 2026

Categories

  • Altium Desinger
  • Công nghệ
  • ESP32
  • Khác
  • Kiến thức điện máy
  • STM32
Live 3D Globes Visitor
©2026 Công nghệ 9 giây | Design: Newspaperly WordPress Theme