Về cơ bản, sự lựa chọn phụ thuộc chủ yếu vào hai tiêu chí: dữ liệu cần lưu trữ là lớn hay nhỏ và liệu nó có được viết lại thường xuyên hay không:
- EEPROM là tuyệt vời cho dữ liệu nhỏ thay đổi thường xuyên. Lý do là: nó chỉ được bán cho các kích thước nhỏ, nhưng chúng thường có thể bị xóa một byte. Hơn nữa, độ bền của EEPROM rất cao (hàng triệu chu kỳ).
- Flash rất tốt cho dữ liệu lớn không thay đổi thường xuyên. Nó có sẵn với giá rẻ cho các kích thước lớn, nhưng khi bạn cần ghi đè dữ liệu, bạn chỉ có thể làm điều đó cho toàn bộ trang, có thể là một vài kB. Và độ bền là nhiều hơn trong phạm vi 100.000 chu kỳ.
Tôi sẽ không đi sâu vào chi tiết về sự khác biệt giữa cả hai, nó đã được đề cập:
Về thẻ SD: Thẻ SD là một loại đèn flash có thể tháo rời và do đó, nó tuân theo các ràng buộc tương tự như đèn flash thông thường. Tuy nhiên, nó thường sử dụng flash NAND trong khi thông thường, các chip flash nối tiếp sử dụng flash NOR. NAND flash thuận tiện hơn cho việc viết (các trang nhỏ hơn, xóa nhanh hơn) nhưng kém tin cậy hơn. Bạn có thể nhận được các khối xấu sau một thời gian, nếu bạn viết nhiều. Việc cân bằng hao mòn có thể giảm thiểu điều này, nhưng không phải lúc nào nó cũng được thực hiện trong thẻ SD giá rẻ ( Có đúng là Thẻ SD / MMC không bị hao mòn với bộ điều khiển riêng không? ). Bạn có thể thực hiện nó trong phần mềm, nhưng nó không tầm thường.
Tuy nhiên, sự lựa chọn giao diện (I2C hoặc SPI) hoàn toàn không liên quan. I2C chậm hơn nhưng sử dụng ít chân hơn. I2C EEPROM cũng thường rẻ hơn SPI, nhưng bạn thường quyết định sử dụng cái này hay cái khác tùy thuộc vào cách bạn gán các chân MCU trong ứng dụng của mình.
Bây giờ, bạn đã đưa ra các trường hợp sử dụng cụ thể, vì vậy hãy xem xét từng cái một:
Cấu hình hệ thống và dữ liệu hiệu chuẩn
Chà, điều này không đặt ra nhiều ràng buộc: dữ liệu này thường rất nhỏ và không thay đổi thường xuyên. Vì vậy, ở đây, đơn giản nhất là đặt nó ở nơi có chi phí ít hơn:
- EEPROM MCU nội bộ nếu bạn có
- hoặc một số đèn flash ngoài nếu bạn đã cần nó cho một số mục đích khác
- hoặc cuối cùng là thẻ SD nếu bạn không có bộ nhớ liên tục khác. Tuy nhiên, xin lưu ý rằng, vì cuối cùng thẻ SD có thể được gỡ bỏ và đặt vào một thiết bị khác, dữ liệu hiệu chuẩn sẽ không còn phù hợp nữa. Vì vậy, bạn có thể muốn tránh điều đó.
Nếu không có nhu cầu lưu trữ liên tục trong thiết bị của bạn và không có EEPROM nội bộ trong MCU, cuối cùng bạn có thể sử dụng một trang flash cụ thể trong flash của chính MCU (nếu MCU cho phép điều này). Nếu không, bạn có thể rơi lại vào một EEPROM nhỏ bên ngoài.
Lưu ý rằng trong trường hợp cụ thể của địa chỉ MAC, có EEPROM được bán với địa chỉ MAC được lập trình sẵn bên trong, được đảm bảo là duy nhất (ví dụ: Microchip 24AAxxx). Vì vậy, đó sẽ là con đường để đi, trừ khi bạn đã được chính thức gán một khối địa chỉ bởi IEEE hoặc sẵn sàng mạo hiểm sử dụng các địa chỉ được gán tại địa phương.
Nhật ký
Điều này thường lớn, và thay đổi thường xuyên. Lớn có nghĩa là flash, không phải EEPROM. Vì vậy, bạn có thể sử dụng chip flash hoặc thẻ SD, nhưng nếu nhật ký thực sự được viết lại thường xuyên, tốt hơn bạn nên sử dụng thẻ SD. Nếu không, bạn có nguy cơ hao mòn chip flash, và nếu nó được hàn trên bảng, nó sẽ khó thay thế hơn thẻ SD. Cũng lưu ý rằng, khi viết nhật ký bằng cách đạp xe trên toàn bộ trang flash, việc cân bằng hao mòn thực sự trở nên không quan trọng để thực hiện.
Trong trường hợp đây là những khúc gỗ nhỏ, bạn thật may mắn, hãy đi với EEPROM (miễn là độ bền được chấp nhận).
Lưu ý rằng, nếu độ bền là một vấn đề thực sự, có những giải pháp bổ sung với độ bền thực tế không giới hạn và kích thước tương đối lớn: F-RAM và MRAM. Nhưng những thứ này có giá cả một cánh tay và một chân, và bạn đã không đề cập đến chúng như là một lựa chọn. Cũng lưu ý rằng hai công nghệ mới hơn này đạt được tốc độ xóa / ghi tốt hơn nhiều so với flash, vì vậy để ghi nhật ký liên tục, điều này có thể thú vị.
Mã và tài nguyên mã
Thường lớn, nhưng không thay đổi thường xuyên. Một chip flash ngoài (thường là đèn flash NOR) là lý tưởng cho việc này.
Bảo mật và quản lý quyền kỹ thuật số
Điều này là khó khăn hơn. Nếu nó thực sự chứa dữ liệu nhạy cảm không bao giờ được trích xuất, tốt hơn hết bạn nên sử dụng thẻ thông minh theo yếu tố hình thức SIM (cuối cùng có một số phần mềm tùy chỉnh trong đó). Nhưng điều này tất nhiên làm phức tạp thiết kế rất nhiều . Một giải pháp thay thế (dễ dàng hơn và rẻ hơn) có thể là một chip bảo mật chuyên dụng như dòng Atmel AT88SC, nhưng các lệnh có sẵn trên chip phải có ý nghĩa đối với ứng dụng cụ thể của bạn. Những gì có thể được thực hiện trên con chip này và theo điều kiện nào phải được lên kế hoạch cẩn thận.
Nếu bạn chỉ cần bảo mật "cơ bản", đơn giản nhất là sử dụng MCU EEPROM nội bộ. Nó sẽ không an toàn như thẻ thông minh hoặc chip chuyên dụng (chứa các biện pháp bảo mật cụ thể, như bảo vệ chống lại các cuộc tấn công ánh sáng, biện pháp đối phó với phân tích lỗi / điện trong chip, v.v ...), nhưng đây là cách tốt nhất bạn có thể làm
Mặt khác, nếu không có EEPROM nội bộ, bạn sẽ kết thúc với các tùy chọn tương tự như đối với dữ liệu cấu hình / hiệu chuẩn. Tuy nhiên, sử dụng bất kỳ chip ngoài nào để lưu trữ dữ liệu an toàn là một rủi ro vì các dòng dữ liệu có thể dễ dàng được theo dõi bằng bộ phân tích logic đơn giản và dữ liệu nhạy cảm được trích xuất. Vì vậy, ngay cả khi EEPROM được cho là khó giả mạo hơn flash, việc chọn cái này hay cái khác trong trường hợp chip bên ngoài không tạo ra bất kỳ sự khác biệt nào từ quan điểm bảo mật.
Cuối cùng, thẻ SD chắc chắn là ý tưởng tồi tệ nhất ở đây, vì nó có thể tháo rời. Dữ liệu nhạy cảm sau đó có thể được đọc từ PC mà không cần bất kỳ phần cứng cụ thể nào.