Thông báo

Collapse
No announcement yet.

Tăng số lần ghi đọc EEPROM

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Tăng số lần ghi đọc EEPROM

    EEPROM của em phải ghi đi ghi lại nhiều lần,mà lại chỉ dùng có mỗi 1 Byte thui, trong khi số lần ghi nó là có hạn. Cứ ghi mãi thì nó sẽ hỏng, mà lại chỉ hỏng một Byte . Em đang muốn dùng tất cả EEPROM để lưu trữ, như vạy ghi xóa thỏai mai.
    Các bác cho em ý kiến nhá.
    ●█═██▄▄▄▄▄▄▄▄▄
    ▄▅██████▅▄▃▂
    ████████████████
    ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

  • #2
    Đọc datasheet thấy ghi đọc những 1.000.000 lần , cứ dùng tẹt đi
    Cung cấp Oscilocope , Inverter , Switching , DC power supply , AC millivolt meter ....

    Comment


    • #3
      Nguyên văn bởi hiodong Xem bài viết
      Đọc datasheet thấy ghi đọc những 1.000.000 lần , cứ dùng tẹt đi
      HÌnh như hơi quá bác ạ! làm gì tận 1 MIL . Ví dụ như ATmega8 có 10.000 lần "bọ"
      Mà dù cho 1 MIL thật nhưng cứ 1 s ghi và phát kiểu gì chả hỏng.
      ●█═██▄▄▄▄▄▄▄▄▄
      ▄▅██████▅▄▃▂
      ████████████████
      ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

      Comment


      • #4
        Lưu trữ dữ liệu khi mất nguồn nuôi

        Nguyên văn bởi luulinh Xem bài viết
        HÌnh như hơi quá bác ạ! làm gì tận 1 MIL . Ví dụ như ATmega8 có 10.000 lần "bọ"
        Mà dù cho 1 MIL thật nhưng cứ 1 s ghi và phát kiểu gì chả hỏng.
        Bộ nhớ EEPROM hay các loại non-volatile nói chung dùng để lưu dữ liệu khi mất nguồn nuôi, còn bình thường khi nguồn đầy đủ thì bạn load ra RAM mà dùng, sao phải mỗi giây phải lưu 1 lần vào EEPROM?
        Có thể có nhiều cách để duy trì giá trị của dữ liệu. Có thể dùng thêm pin ngoài + chế độ tiết kiệm năng lượng, hoặc dùng 1 mạch phát hiện mất nguồn nuôi để báo về AVR khi nguồn sụt, lúc đó lưu dữ liệu lại cũng kịp (cỡ một vài milisec cho 1 byte thôi mà).... Dùng cách nào thì phụ thuộc project của bạn, đúng thế không nhỉ?
        Thân mến,

        Comment


        • #5
          ý của bạn luulinh khá hay, thực sự thì cái ổ cứng ta sài cũng được Window nó ghi theo kiểu như vậy, nhằm để hạn chế tình trạng dữ liệu cứ ghi hoài lên một phân vùng nào đó, còn những phân vùng khác lại không được ghi => mau hư ổ cứng.với MCU cũng có thể bắt chước như vậy. Cách thực hiện là: ghi vào EERPOM ở một địa chỉ có giá trị ngẫu nhiên.
          Như vậy bạn phải có hàm tạo số ngẫu nhiên có giá trị từ 0 - size eeprom.
          chẳn hạn (viết bằng codevisionAVR):

          int var_add = Random();// tạo giá trị ngẫu nhiên cho biến
          eeprom int var_eeprom @var_add ;// tạo biến var_eeprom trong eeprom có địa chỉ var_add
          // làm gì với biến var_eeprom thì tùy

          .......

          mỗi lần ghi vào eeprom thì gọi lại random()

          Hàm random() bạn phải tự viết, hoặc dùng hàm thư viện stdlib.h:
          int rand (void): hàm này tạo số ngẫu nhiên từ 0-32767

          có ý nào hay hơn xin bạn bổ sung
          Last edited by thavali; 16-04-2008, 14:30.

          Comment


          • #6
            Nguyên văn bởi thavali Xem bài viết
            ý của bạn luulinh khá hay, thực sự thì cái ổ cứng ta sài cũng được Window nó ghi theo kiểu như vậy, nhằm để hạn chế tình trạng dữ liệu cứ ghi hoài lên một phân vùng nào đó, còn những phân vùng khác lại không được ghi => mau hư ổ cứng.với MCU cũng có thể bắt chước như vậy. Cách thực hiện là: ghi vào EERPOM ở một địa chỉ có giá trị ngẫu nhiên.
            Như vậy bạn phải có hàm tạo số ngẫu nhiên có giá trị từ 0 - size eeprom.
            chẳn hạn (viết bằng codevisionAVR):

            int var_add = Random();// tạo giá trị ngẫu nhiên cho biến
            eeprom int var_eeprom @var_add ;// tạo biến var_eeprom trong eeprom có địa chỉ var_add
            // làm gì với biến var_eeprom thì tùy

            .......

            mỗi lần ghi vào eeprom thì gọi lại random()

            Hàm random() bạn phải tự viết, hoặc dùng hàm thư viện stdlib.h:
            int rand (void): hàm này tạo số ngẫu nhiên từ 0-32767

            có ý nào hay hơn xin bạn bổ sung
            - Khi ta ghi thỉ random, nhưng khi đọc lại thì sao?
            - Tiếp theo là hàm random hình như cũng chỉ là "giả random" thui.

            Cái này em có cách rồi, dùng hết được EEPROM luôn.
            - Nhưng nói chung cách detect mất nguồn như bác BM nói vẫn hay hơn, mặc dù có vẻ lằng nhằng.
            ●█═██▄▄▄▄▄▄▄▄▄
            ▄▅██████▅▄▃▂
            ████████████████
            ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

            Comment


            • #7
              không muốn ghi lên 1 byte nhớ nhiều lần thì sau mỗi lần ghi tăng giá trị thanh ghi địa chỉ lên 1 ,đến 1 giá trị nào đó thì quay trở về vị trí ban đầu, trước khi ghi 1byte mới thì nhớ ghi vào vị trí cũ FFH . sau khi mất điện ta phải seach lại toàn bộ eeprom xem ô nào giá trị khác FFH thì lấy( dĩ nhiên số liệu khi ghi phải tránh con số FFH ra).
              nói thì nói thế thối chứ đây là 1 cách làm tồi . khi lập trình ta phải phân tích tình hình để chỉ ghi lên eepom khi thật cần thôi

              Comment


              • #8
                Chơi kiểu này dc không:
                - Trước hết tạo 1 vùng nhớ EEPROM 100 byte, xóa tất cả chúng về 0.
                - Khi cần lưu byte d.liệu ta sẽ xem nó có giá trị bao nhiêu, chẳng hạn d.liệu = 10, thế thì cất nó vào ô nhớ thứ 10. Nếu d.liệu>=100 thì lưu 1 vào ô nhớ 100, xóa hết 99 ô nhớ đầu rồi mới cất phần lẻ vào ô nhớ tương ứng.
                - Khi cần đọc lại, ta sẽ đọc hết cả trăm byte, tìm d.liệu lớn nhất trong 99 byte đầu rồi cộng thêm số lần d.liệu ở byte thứ 100 nếu có.
                Như vậy d.liệu có thay đổi 100 lần thì ta mới chỉ ghi vào EEPROM 2 lần. Số lần nạp lớn nhất cho EEPROM là 10.000 thì d.liệu có thể thay đổi 500.000 lần.
                Nếu 1 ngày thay đổi 1000 lần, 1 tháng là 30.000 lần thì ta có thể dùng EEPROM dc cả năm rồi còn j. Muốn lâu hơn nữa, chắc cũng dc thôi.
                !e

                Comment


                • #9
                  không muốn ghi lên 1 byte nhớ nhiều lần thì sau mỗi lần ghi tăng giá trị thanh ghi địa chỉ lên 1 ,đến 1 giá trị nào đó thì quay trở về vị trí ban đầu, trước khi ghi 1byte mới thì nhớ ghi vào vị trí cũ FFH . sau khi mất điện ta phải seach lại toàn bộ eeprom xem ô nào giá trị khác FFH thì lấy( dĩ nhiên số liệu khi ghi phải tránh con số FFH ra).
                  nói thì nói thế thối chứ đây là 1 cách làm tồi . khi lập trình ta phải phân tích tình hình để chỉ ghi lên eepom khi thật cần thôi
                  Nhược điểm cách này là phải đọc trung bình 50% và phải tránh 1 số("FFH" chẳng hạn).
                  Cách em làm khá hơn 1 tẹo (tinh thần vẫn vậy), mỗi khi khởi động sẽ search tìm vị trí của dữ liệu, ghi địa chỉ của nó vào 1 biến trên RAM, bây giờ có làm gì cũng chỉ phải đọc 1 lần. Còn muốn ghi FFH thì xử lý tẹo là được. Xem ra nó cũng đỡ tồi hơn rồi, cái chính là cùng phần cứng đấy lập trình sao cho EEPROM sống lâu hơn thui :P
                  ●█═██▄▄▄▄▄▄▄▄▄
                  ▄▅██████▅▄▃▂
                  ████████████████
                  ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

                  Comment


                  • #10
                    cách lưu vào ram là hay hơn cả ! nhưng mà khi cúp điện thì cần một khoản thời gian lưu vào eeprom là hiệu quả nhất ! nhưng eeprom thì hạn chế số lần ghi đọc nên cách tốt hơn cả thì lưu vào ram ! vì ram không hạn chế số lần ghi đọc nhưng có nhược điểm là phải có nguồn nuôi cho nó thôi !
                    Mạch nạp Little Programmer
                    MSC-51,AVR,EEPROM ... etc

                    Site Fukusei shop :

                    Comment


                    • #11
                      cách lưu vào ram là hay hơn cả ! nhưng mà khi cúp điện thì cần một khoản thời gian lưu vào eeprom là hiệu quả nhất ! nhưng eeprom thì hạn chế số lần ghi đọc nên cách tốt hơn cả thì lưu vàoram ! vì ram không hạn chế số lần ghi đọc nhưng có nhược điểm là phải có nguồn nuôi cho nó thôi !
                      Em biết là hay, nhưng cái chính là muốn hay thì phải làm lại trong khi em đang lười...
                      ..cùng phần cứng đấy lập trình sao cho EEPROM sống lâu hơn thui :P
                      ●█═██▄▄▄▄▄▄▄▄▄
                      ▄▅██████▅▄▃▂
                      ████████████████
                      ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

                      Comment


                      • #12
                        Re:

                        Tui có cách này ko biết ổn ko. Lấy ô nhớ cuối cùng của ROM để lưu giá trị Index. Sau một khoảng thời gian chừng vài ngày thay đổi giá trị Index này một lần. Khi ghi dữ liệu thì ghi vào ô nhớ thứ Index và khi đọc thì đọc giá trị Index này rồi mới đọc giá trị đã lưu ở ô thứ Index.

                        Comment


                        • #13
                          Nguyên văn bởi tam1234 Xem bài viết
                          Tui có cách này ko biết ổn ko. Lấy ô nhớ cuối cùng của ROM để lưu giá trị Index. Sau một khoảng thời gian chừng vài ngày thay đổi giá trị Index này một lần. Khi ghi dữ liệu thì ghi vào ô nhớ thứ Index và khi đọc thì đọc giá trị Index này rồi mới đọc giá trị đã lưu ở ô thứ Index.
                          Cách này hay đấy chứ!
                          !e

                          Comment

                          Về tác giả

                          Collapse

                          luulinh Tìm hiểu thêm về luulinh

                          Bài viết mới nhất

                          Collapse

                          Đang tải...
                          X