14. OPTION BYTES TRONG STM8S

OPTION BYTES TRONG STM8S.

14. OPTION BYTES TRONG STM8S.

  1. CƠ SỞ LÝ THUYẾT.
  2. Option byte trong STM8S003 phục vụ một số chức năng riêng biết được liệt kế như sau:

    • ROP(Memory Readout protection) : Mục đích của chức năng này là sẽ khóa code, không cho phép đọc ngược, bảo vệ chương trình tránh khỏi tình trạng copy source code cũng như flash đè code. Trong trường hợp đã write ROP option byte là ON thì chúng ta chỉ có thể write ROP off và flash đè code khác xuống MCU, không thể đọc lại được code(nhà sản xuất có cách nào chưa công bố thì mình không biết).
    • UBC[0:7] : Config size cho bootloader. Một số ứng dụng cần update Firmware theo version chúng ta sẽ cần viết bootloader và application cho nó, các bit này sẽ hữu dụng khi chuyển vector ngắt đến địa chỉ mà application bắt đầu cũng như bảo vệ code cho vùng bootloader. Phần config này sẽ hữu dụng khi chúng ta sử dụng STVD và có nhược điểm vùng nhớ application bắt đầu phải chẵn và chia hết cho 64(Không config linh động được địa chỉ bắt đầu của application). Trong IAR sẽ có một số cách để config bootloader mà k cần sử dụng đến option này, các bạn có thể tham khảo thêm với IAR ở đây : http://laptrinharmst.blogspot.com/2021/11/bai-15-bootloader-stm8s-tren-iar.html và file AN2659.
    • AFR[0:7]: Config cho Alternate function. Như các bạn đã biết mỗi chân vi điều khiển có thể có nhiều chức năng khác nhau,để linh hoạt trong việc config các chức năng này nhà sản xuất đã thêm tính năng để việc sử dụng chân điều khiển linh hoạt hơn. Ví dụ: Chân PC5 của STM8S003 có chức năng mặc định sẽ là SPI tạo xung clock, ngoài ra nó cũng là chân Timer2 chanel1, để sử dụng tính năng timer chúng ta bắt buộc phải write thêm bit config AFR0. Chức năng khác nhau của config này các bạn có thể tham khảo thêm trong datasheet.
    • HSITRIM : config độ phân giải cho bộ xung clock HIS.
    • LSI_EN : config cho phép bộ dao động LSI như là bộ cung cấp clock chính cho MCU.
    • IWDG_HW, WWDG_HW, WWDG_HALT : cho phép bộ independent watchdog, window watchdog hoạt động 1 cách tự động sau khi cấp nguồn hay không.
    • EXTCLK: cho phép sử dụng thạch anh ngoài hay không.
    • CKAWUSEL : config low-speed clock source cho bộ AWU(Analog wakeup) lấy từ LSI hay HSE.
    • PRSC : đi chung với config CKAWUSE, nếu lấy từ HSE thì tương ứng với tỷ lệ chia.
    • HSECNT[0:7] : config thời gian để bộ dao động ngoại được ổn định trước khi vận hành, option này sẽ sử dụng EXTCLK on.

    Về mặt lí thuyết chúng ta có thể nạp option byte mỗi lần flash code theo tool nạp tuy nhiên khi viết chương trình bootloader hoặc một số mục đích khác chúng ta có thể dùng các tập lệnh trong thư viện flash để ghi các option byte này mà k cần sử dụng tool nạp. Vùng nhớ của các option tương ứng với bảng bên dưới.

  3. Ví dụ với Option byte.
  4. Ví dụ: viết chương trình sử dụng TIM2_CH3 chớp tắt led với chu kì 1s,duty cycle là 50% trên chân PD2, sử dụng dụng tính năng ghi flash để ghi các byte option mà không cần dùng tool. Chân PD2 có chức năng TIM2_CH3, tuy nhiên nó là Aternate function, cần write option byte mới sử dụng được nếu không chỉ còn cách flash lại các option byte.

    1. Cấu hình bộ nhớ Flash.
    2. Chú ý việc cấu hình ở đây sẽ tương tự như việc cấu hình ghi vào EEPROM.

    3. Cấu hình bộ Timer 2.
    4. Ghi các option byte.
    5. Sử dụng STVP để nạp chương trình mà k cần ghi các option byte.
    6. Kết quả thu được sẽ là led trên chân PD2 sẽ chớp tắt với chu kì 1s(0.5s sáng và 0.5s tắt). Chúc các bạn thành công.

Link tải ví dụ với option bytes ở trên.

13. FLASH và EEPROM TRONG STM8S.

FLASH và EEPROM TRONG STM8S.

FLASH và EEPROM TRONG STM8S.

  1. Cơ Sở Lý Thuyết.
  2. Chào các bạn, Hôm nay mình sẽ tiếp tục một số tìm hiểu về Flash và EEPROM.Chúng là 2 vùng nhớ khác nhau trong STM8S, tuy nhiên về cấu tạo và bản chất thì tương đối giống nhau. Tổng quan về bộ nhớ của của STM8S.

    Bảng thống kê dưới đây sẽ so sánh một số thông tin chung giữa 2 loại:

    Bộ nhớ Flash sử dụng các cổng logic NAND nên giá thành sẽ rẻ hơn, tốc độ truy cập cũng sẽ chậm hơn, bộ nhớ Flash thường truy cập theo khối trong khi EEPROM thì là byte, chức năng tương ứng cũng khác nhau. Ở STM8S003 thì bộ nhớ Flash(8k byte) dùng để lưu trữ chương trình trong khi EEPROM(128 bytes) thì thường dùng để lưu một số thông tin không xóa sau khi Flash hoặc mất điện. Với những thông tin bạn không muốn mất sau khi Flash Firmware mới và tốc độ truy cập cao thì thường chúng ta sẽ sử dụng bộ nhớ EEPROM, ngược lại nhưng thông số thay đổi mỗi lần Flash, tốc độ truy cập thông thường và khối lượng data lớn thì chúng ta sẽ sử dụng bộ nhớ Flash.

  3. Ví dụ với bộ nhớ Flash.
  4. Ví dụ: Ghi data vào 16 byte cuối cùng của bộ nhớ Flash với địa chỉ 0x9FF0 -> 0x9FFF data tương ứng từ 0 -> 15, Sau khi đọc lại data đã ghi, nếu đúng đèn led trên chân PD3 sẽ sáng, ngược lại nếu ghi bị failed hoặc read bị failed thì đèn ở chân PD3 sẽ tắt.

    Cách thức kiểm tra: các bạn sẽ dùng mạch nạp stlink_v2 + phần mềm “ST Visual Programmer” để đọc lại toàn bộ vùng nhớ và kiểm tra data thuộc địa chỉ từ 0x9FF0 -> 0x9FFF.

    1. Config bộ nhớ Flash.
    2. Trước khi thực hiện đọc ghi vào vùng nhớ Flash, chúng ta cần thực hiện một số config quan trọng như: Deinit lại toàn bộ vùng nhớ, Cài đặt thời gian xử lí, đồng thời mở khóa vùng nhớ. “FLASH_MEMTYPE_PROG” tương ứng với việc chọn vùng nhớ Flash để giao tiếp.

    3. Thực thi code giao tiếp với bộ nhớ Flash
    4. Trước tiên chúng ta sẽ ghi data với giá trị từ 0 -> 15 vào địa chỉ bắt đầu từ 0x9FF0 -> 0x9FFF(16 bytes). Đợi 1 khoảng thời gian nhỏ để chắc chắn rằng việc ghi đã thực thi xong, tiếp đến chúng ta sẽ đọc lại và kiểm tra vùng nhớ đã ghi, nếu chỉ cần 1 địa chỉ sai thì sẽ thoát quá trình đọc. Nếu kết quả ghi vào đọc lại giống nhau thì đèn led trên chân PD3 sẽ sang, ngược lại thì tắt.

      Chú ý: Để thao tác với vùng nhớ Flash thì chúng ta cần chú ý rằng code của quá trình biên dịch k được tràn vào vùng nhớ cần đọc/ghi. Ngoài lệnh đọc/ghi thông thường chúng ta có thể sử dụng đọc/ghi các block(IN_RAM trong thư viện) để với mục đích nâng cao tốc độ tương tác khi thao tác với số lượng data lớn.

    5. Kết quả thực thi.
    6. Sau khi dùng stlink_V2 và phần mềm “ST Visual Programmer” để đọc lại toàn bộ vùng nhớ, kết quả sẽ như hình bên dưới.

  5. Ví dụ với bộ nhớ EEPROM.
  6. Ví dụ: ghi data vào 16 byte cuối cùng của bộ nhớ Flash với địa chỉ 0x4000 -> 0x400F data tương ứng từ 0 -> 15, Sau khi đọc lại data đã ghi, nếu đúng đèn led trên chân PD3 sẽ sáng, ngược lại nếu ghi bị failed hoặc read bị failed thì đèn ở chân PD3 sẽ tắt. Cách thức kiểm tra: các bạn sẽ dùng mạch nạp stlink_v2 + phần mềm “ST Visual Programmer” để đọc lại toàn bộ vùng nhớ và kiểm tra data thuộc địa chỉ từ 0x4000 -> 0x400F.

    Tương tự như bộ nhớ Flash, giao tiếp với EEPROM cũng tương tự, chỉ khác cấu hình và địa chỉ.

    1. Config bộ nhớ EEPROM.
    2. Thực thi code giao tiếp với bộ nhớ Flash.
    3. Kết quả.
    4. Note : ngoài lệnh Read/Write , chúng ta còn một số lệnh như xóa, ghi 1 word… Các bạn có thể tham khảo trong file stm8s_flash.c và áp dụng thử cho project của mình. Bộ nhớ EEPROM của STM8S003 chỉ là 128 bytes tức là bắt đầu từ 0x4000 ->0x407F.

Link tải ví dụ với bộ nhớ flash. Link tải ví dụ giao tiếp với EEPROM