Thông báo

Collapse
No announcement yet.

Khác biệt giữa Flash và EEPROM của PIC?

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

  • Khác biệt giữa Flash và EEPROM của PIC?

    - Pic hỗ việc ghi - đọc vào flash khi chương trình đang chạy ( AVR không hỗ trợ điều này )
    - Về chức năng này : ta có thể dùng Flash như EEPROM? - có nghĩa là lưu giữ liệu vào - tắt nguồn dữ liệu vẫn còn.
    - Ta có thể sử dụng nhiều bộ nhớ hơn để lưu giữ liệu - lớn hơn kích thước của EEPROM?
    - Vậy khác biệt giữa Flash và EEPROM là gì, liệu có hạn chế gì khi sử dụng Flash để lưu dữ liệu. ( khi dùng Flash như EEPROM )?

  • #2
    http://download.micron.com/pdf/technotes/FT01.pdf

    bạn có thể tìm hiểu về sự khác nhau giữa Flash và EEPROM ở đây, nó viết và có hình ảnh rất rõ.

    Vì những câu trả lời này F đã trả lời nhiều lần lắm rồi, nên bắt đầu lười vả chỉ đưa link thôi, các bạn tìm lại các bài viết của F nhé (dường như là không thể tìm được)... (F tìm cũng không ra)...

    Chúc vui.
    Falleaf
    Công ty TNHH Thương mại và Giao nhận R&P
    58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
    mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

    Comment


    • #3
      Nguyên văn bởi Laguna
      1- Pic hỗ việc ghi - đọc vào flash khi chương trình đang chạy ( AVR không hỗ trợ điều này )
      2- Về chức năng này : ta có thể dùng Flash như EEPROM? - có nghĩa là lưu giữ liệu vào - tắt nguồn dữ liệu vẫn còn.
      3- Ta có thể sử dụng nhiều bộ nhớ hơn để lưu giữ liệu - lớn hơn kích thước của EEPROM?
      4- Vậy khác biệt giữa Flash và EEPROM là gì, liệu có hạn chế gì khi sử dụng Flash để lưu dữ liệu. ( khi dùng Flash như EEPROM )?
      -Về ý 1 của bạn:Chỉ một số PIC có hỗ trợ việc ghi-đọc flash,Một số họ AVR cũng có support việc ghi/đọc flash..
      -Về ý 2 và 3 của bạn:Có thể.
      -Về ý 4 của bạn: số lần ghi/xóa của flash thường ít lần hơn so với eeprom(khoảng 10 lần).

      Comment


      • #4
        (gấp 10 lần, ví dụ này với PIC,còn các họ khác thì có thể khác).

        Em thấy việc nạp bằng bootloader rất hay,nhưng ít khi thấy ai sử dụng cho avr thì phải.

        Comment


        • #5
          Ngoài ra, ta cũng cần chú ý khi ghi flash của PIC:
          1-Một lần ghi của PIC16/18 thì có 14 bit/16 bit dữ liệu.Bởi vậy,một địa chỉ có thể lưu các số 14/16 bit.Trong khi một địa chỉ của eeprom chỉ lưu được dữ liệu 8 bit.
          2-Nếu không phải chức năng như booloader, khi ghi vào flash nên chú ý ghi dữ liệu vào những vùng trống(những chỗ mà chưa có code tại đó), ngoài ra, nếu ghi vào dải địa chỉ nào thì dải đó phải enable mới được(phần config). Bởi vậy, làm việc ghi dữ liệu này phải cẩn thận ở 2 yếu tố trên.
          3-Ngoài ra có chú ý nhỏ: nếu bạn cài đặt watchdog enable, thì nếu ghi dữ liệu vào eeprom/flash một mảng dữ liệu sẽ rất mất thời gian.Trong những trường hợp đó, tính toán để không bị watchdog reset, một số cách đưa ra như: chèn thêm câu lệnh xóa wd, bố trí mã lệnh hợp lý để tránh thời gian chết trong khi ghi flash/eeprom...

          Comment


          • #6
            - khi dùng một bảng dữ liệu cố định để tra cứu : trong CodeVisionAVR cho phép khai báo biến, mảng dạng "flash" cho phép đọc nhưng không ghi được - tương tự 89 khi khai báo dạng "code" trong 89. Trong PIC thì khai báo dạng hằng "const" . Bảng dữ liệu này sẽ được ghi bào code - trong file hex của trương trình khi dịch ra.
            - Ví dụ chip chỉ có 542byte ROM, tôi muốn dùng một bảng số liệu có kích thước > 512byte, và "thỉnh thoảng" có thể sửa dữ liệu trên bẳng. ---> liệu flash của PIC có thích hợp với ứng dụng này?
            - Nếu không nhầm thì các trình dịch C cho PIC không hỗ khai báo biến/mảng dạng "flash" như trong CodeVisionAVR. Có hỗ trợ đọc ghi flash nhưng dạng trực tiếp theo địa chỉ.
            - Nếu dùng flash của PIC cho ứng dụng trên có nhiều bất cập như : tự quản lý địa chỉ vùng dữ liệu ... Không biết có thể khai báo mảng dữ liệu kiểu flash không nhỉ? lúc này thì trình dịch sẽ tự quản lý vùng nhớ mà ta không sợ ghi đè vào vùng trương trình.

            Comment


            • #7
              http://picvietnam.com/showthread.php?t=5&page=2&pp=15

              Xem bài kỹ thuật bảng để hiểu về mảng dữ liệu trong PIC được xây dựng như thế nào.

              Trang em xem lại bài tập lệnh và kiến trúc PIC này:

              http://picvietnam.com/showthread.php?t=5&page=3&pp=15
              http://picvietnam.com/showthread.php?t=5&page=2&pp=15

              Vì kiến trúc RISC, cho nên PIC có bộ nhớ chương trình có độ dài tùy thích, 16F877 là EEPROM, còn 16F877A là Flash.

              Cả hai thằng đều viết giống nhau y chang, nhưng thực ra nó phân biệt làm 2 loại EEPROM để lưu và EEPROM để dùng nạp chương trình. Vì lý do thương mại, khi AVR đưa ra khái niệm Flash, PIC cũng phải làm theo khái niệm Flash ra sau với 16F877. Nhưng khi lên 16F877A, thì Flash của PIC là Flash thật. Thật giả là sao có lẽ để em tìm hiểu thêm, vì dạo này đầu anh nó mụ rồi, không nhớ được nhiều nữa.

              Cái này lâu quá anh không nhớ rõ, nhưng hồi trước anh viết rất rõ về cái này. Chính vì vậy, khi nó bảo là ghi vào Flash ghi được 12/14/16 bits, nhưng thực ra cũng chỉ là ghi vào EEPROM, mà EEPROM đó là bộ nhớ chương trình, không phải bộ nhớ dữ liệu. Còn cái Flash hay EEPROM không phân biệt ở chỗ này. Flash hay EEPROM chỉ là công nghệ phần cứng mà thôi. Cái link anh đưa ở trên đã nói rất rõ.

              Chúc vui.
              Falleaf
              Công ty TNHH Thương mại và Giao nhận R&P
              58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
              mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

              Comment


              • #8
                http://download.micron.com/pdf/technotes/FT01.pdf

                bạn có thể tìm hiểu về sự khác nhau giữa Flash và EEPROM ở đây, nó viết và có hình ảnh rất rõ.
                http://picvietnam.com/showthread.php?t=5&page=2&pp=15

                Xem bài kỹ thuật bảng để hiểu về mảng dữ liệu trong PIC được xây dựng như thế nào.
                - Cái link đầu chỉ nói về sự khác biệt về phần cứng giữa flash và eeprom. Nhưng tôi không có ý định tìm hiểu sâu về sự khác biệt về phần cứng mà chỉ quan tâm đến ứng dụng phần mềm. Khi nào nên dùng mảng flash, khi nào nên dùng mảng eeprom? ( cả 2 thằng đều có khả năng đọc ghi )
                - Cái link thứ 2 nói về cách dùng mẳng cơ bản bằng ASM của PIC. Hồi dùng 89 cũng gõ ASM mỏi tay rồi. Bây giờ dùng PIC, AVR chuyển sang dùng C rồi - viết cho nó nhanh mà kích thước code cũng không khác nhau mấy - thuật giải tốt có thể quản lý được tốc độ.
                - PIC tôi mới viết một số ứng dụng đơn giản thôi. Nói chung thằng này khó dùng hơn AVR. Chỉ có một lý do duy nhất để dùng PIC là nó trống nhiễu tốt hơn.

                -- Đang có một ứng dụng cần sử dụng rất nhiều ROM, đang cân nhắc giữa dùng AVR và PIC. Đọc thấy flash của PIC có thể ghi đọc được - có khả năng như EEPROM, nhưng mới tìm hiểu qua thấy nó cũng rất khó dùng ( dùng trên C ) - mình phải quản lý khá nhiều thứ. Có bác nào dùng flash để ghi đọc rồi cho tó ít kinh nghiệm thực tế với ?

                Comment


                • #9
                  -Về ý 1 của bạn:Chỉ một số PIC có hỗ trợ việc ghi-đọc flash,Một số họ AVR cũng có support việc ghi/đọc flash..
                  - không biết AVR nào có support việc đọc/ghi flash thế ? T3 có thể nói rõ con nào được không?

                  -Về ý 4 của bạn: số lần ghi/xóa của flash thường ít lần hơn so với eeprom(khoảng 10 lần).
                  - số lần ghi đọc flash/eeprom của AVR là : 10.000/100.000
                  - số lần ghi đọc flash/eeprom của PIC là : 100.000/1.000.000
                  - nhưng nói chung số lần ghi đọc không quan trọng lắm, thường thì rất ít khi dùng hết số lần giới hạn này.

                  2-Nếu không phải chức năng như booloader, khi ghi vào flash nên chú ý ghi dữ liệu vào những vùng trống(những chỗ mà chưa có code tại đó), ngoài ra, nếu ghi vào dải địa chỉ nào thì dải đó phải enable mới được(phần config). Bởi vậy, làm việc ghi dữ liệu này phải cẩn thận ở 2 yếu tố trên.
                  - đúng như vậy. Việc dùng là khá phức tạp. Không biết có nên đầu tư thời gian vào để giải quyết vấn đề đấy không hay chuyển qua hướng giải quyết khác - như dùng EEPROM 24Cxx kích thước cũng khá lớn - mỗi tội chi phí thêm ...

                  Comment


                  • #10
                    -Về AVR thì bạn check con ATMEGA8535 xem sao. Những con đời trung hoặc cao thì có support hết đó.Vì đây là những cái tính năng thông dụng của uC. Bởi vậy hầu hết AVR đều có tính năng đó.
                    -Về ghi flash thì ko phức tạp đâu. Vì chương trình mình viết ko quá dài, thường chỉ <70%, bởi vậy chỗ còn lại sẽ là dành cho việc ghi flash, trình dịch sẽ trừ đoạn địa chỉ để bạn làm điều đó(>30%). Việc hỗ trợ ghi mảng hay ko thì ko phải do PIC mà là do trình dịch PIC, vậy có 2 cách:
                    +Cách 1: chọn 1 trình dịch support(bạn thử với CCS,picbasic...xem)
                    +Cách 2: bạn viết 1 hàm con làm điều này.

                    Còn việc số lần ghi/xóa cũng quan trọng đó bạn. Bạn xem cáctivi đời cũ, các kênh ko nhớ được thì sẽ hiểu vấn đề. Ngoài ra,có thể dùng phần mềm và con trỏ dịch địa chỉ để tăng việc ghi/xóa này. Ví dụ: bạn cần lưu vào eeprom 1 byte, số lần ghi xóa x lần,giả sử eeprom có dung lượng k byte. Vậy bạn có thể tăng số lần ghi/xóa tới gần :k*x lần, cách này thực hiện nhờ phần mềm.

                    Comment


                    • #11
                      Không chỉ CCS hay PicBasic hỗ trợ viện ghi vào EEPROM hay Flash mà cả HT-PIC cũng hỗ trợ điều này, mở file <pic.h> thấy ngay nó hỗ trợ.
                      Việc ghi vào Flash thì có thể ghi 14/16 bit, còn EEPROM chỉ 8 bit.
                      Các con PIC dòng F có bộ nhớ chương trình là EEPROM mỗi lần có thể ghi 1 byte, trong FxA thì phải táng 1 phát 4 byte, địa chỉ bắt đầu bằng 00.

                      Việc có hỗ trợ EEPROM hay không còn tùy thuộc vào dòng vdk và nhà sản xuất. Ví dụ như Philips nó không có EEPROM, khi hỏi thì nó bảo có chức năng ghi vào bộ nhớ chương trình nên EEPROM không cần thiết.

                      Comment


                      • #12
                        Nguyên văn bởi Laguna
                        - Cái link đầu chỉ nói về sự khác biệt về phần cứng giữa flash và eeprom. Nhưng tôi không có ý định tìm hiểu sâu về sự khác biệt về phần cứng mà chỉ quan tâm đến ứng dụng phần mềm. Khi nào nên dùng mảng flash, khi nào nên dùng mảng eeprom? ( cả 2 thằng đều có khả năng đọc ghi )
                        Bạn đọc hoàn toàn không kỹ, mức điện áp ghi đọc, khả năng ghi xóa đồng thời... , phần cứng chỉ là giải thích vì sao nó làm được như vậy

                        Nguyên văn bởi Laguna
                        - Cái link thứ 2 nói về cách dùng mẳng cơ bản bằng ASM của PIC. Hồi dùng 89 cũng gõ ASM mỏi tay rồi. Bây giờ dùng PIC, AVR chuyển sang dùng C rồi - viết cho nó nhanh mà kích thước code cũng không khác nhau mấy - thuật giải tốt có thể quản lý được tốc độ.
                        Bạn viết C và viết MPASM thì generate code như thế nào? Bạn đã đọc kỹ về phần giải thích của tôi, vì sao PIC cho phép làm như vậy chưa? Bạn đã hiểu kỹ thuật bảng sử dụng trên PIC như thế nào?

                        - PIC tôi mới viết một số ứng dụng đơn giản thôi. Nói chung thằng này khó dùng hơn AVR. Chỉ có một lý do duy nhất để dùng PIC là nó trống nhiễu tốt hơn.
                        Bạn đã làm việc nhiều với nhiễu? Sao bạn biết nó chống nhiễu tốt hơn? Bạn đã thử ứng dụng AVR trong công nghiệp? Xin chia xẻ với mọi người

                        Nguyên văn bởi Laguna
                        -- Đang có một ứng dụng cần sử dụng rất nhiều ROM, đang cân nhắc giữa dùng AVR và PIC. Đọc thấy flash của PIC có thể ghi đọc được - có khả năng như EEPROM, nhưng mới tìm hiểu qua thấy nó cũng rất khó dùng ( dùng trên C ) - mình phải quản lý khá nhiều thứ. Có bác nào dùng flash để ghi đọc rồi cho tó ít kinh nghiệm thực tế với ?
                        Không có gì để giải thích thêm
                        Falleaf
                        Công ty TNHH Thương mại và Giao nhận R&P
                        58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
                        mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

                        Comment


                        • #13
                          Nguyên văn bởi Laguna
                          Đang có một ứng dụng cần sử dụng rất nhiều ROM, đang cân nhắc giữa dùng AVR và PIC. Đọc thấy flash của PIC có thể ghi đọc được - có khả năng như EEPROM, nhưng mới tìm hiểu qua thấy nó cũng rất khó dùng ( dùng trên C ) - mình phải quản lý khá nhiều thứ. Có bác nào dùng flash để ghi đọc rồi cho tó ít kinh nghiệm thực tế với ?
                          Em đã táng cả bộ font led matrix vào con PIC, nó ghi đọc Flash rất tốt. Con PIC18F4680 Flash của nó là 64K (hình như batbatdieu bán với giá 70K) , bác ghi thoái mái. 24H sắp ra đời có những con có tới 256K.
                          Bác gửi cho em cái mail, em gửi cho hàm đọc ghi vào Flash.

                          Comment


                          • #14
                            Khác nhau cơ bản giữa FLASH và EEPOM của PIC là: FLASH truy cập như bộ nhớ còn EEPROM truy cập như là 1 ngoại vi của MCU.
                            Nhà sản xuất chuyên nghiệp các sản phẩm OEM cho gia dụng và công nghiệp.

                            Biến tần
                            Máy giặt
                            Lò vi sóng
                            Bếp từ.
                            Tủ lạnh.
                            Điều hòa

                            Comment


                            • #15
                              Nguyên văn bởi phamthaihoa
                              Không chỉ CCS hay PicBasic hỗ trợ viện ghi vào EEPROM hay Flash mà cả HT-PIC cũng hỗ trợ điều này, mở file <pic.h> thấy ngay nó hỗ trợ.
                              Việc ghi vào Flash thì có thể ghi 14/16 bit, còn EEPROM chỉ 8 bit.
                              Các con PIC dòng F có bộ nhớ chương trình là EEPROM mỗi lần có thể ghi 1 byte, trong FxA thì phải táng 1 phát 4 byte, địa chỉ bắt đầu bằng 00.

                              Việc có hỗ trợ EEPROM hay không còn tùy thuộc vào dòng vdk và nhà sản xuất. Ví dụ như Philips nó không có EEPROM, khi hỏi thì nó bảo có chức năng ghi vào bộ nhớ chương trình nên EEPROM không cần thiết.
                              Có vẻ bạn PTH chưa hiểu ý lắm:
                              Việc hỗ trợ khai báo mảng rồi gán trực tiếp thì các trình dịch AVR làm rất hay:
                              ví dụ khai báo mảng kiểu flash: a[10];
                              Thì có thể gán:a[1]=200 trực tiếp luôn chứ ko cần làm kiểu ghi/đọc như một số trình dịch của PIC.

                              Còn một số trình dịch PIC thì phải làm thủ công các lệnh ghi vào flash tại địa chỉ x giá trị 200.

                              Đây là trình dịch support chứ ko phải bản chất là do PIC hay AVR, vì chúng đều có khả năng đó cả. Và đương nhiên, ta có thể viết một hàm tương tự như AVR cho PIC.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X