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.