《DNK210使用指南 -CanMV版 V1.0》第十六章 machine模組實驗

正点原子發表於2024-08-01

第十六章 machine模組實驗

1)實驗平臺:正點原子DNK210開發板

2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0

3)購買連結:https://detail.tmall.com/item.htm?&id=782801398750

4)全套實驗原始碼+手冊+影片下載地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html

5)正點原子官方B站:https://space.bilibili.com/394620890

6)正點原子K210技術交流企鵝群:605557868

本章實驗將介紹machine模組的基礎知識,以及machine模組內部分函式的使用。透過本章的學習,讀者將學習到machine模組的基本使用方法。
本章分為如下幾個小節:
16.1 machine模組介紹
16.2 硬體設計
16.3 程式設計
16.4 執行驗證

16.1 machine模組介紹
machine模組是CanMV內建的模組,machine模組包含了與Kendryte K210硬體相關的特定功能,machine模組中的大部分功能允許實現對Kendryte K210上硬體(例如CPU、UART、Timer等)的直接且不受限制的訪問和控制,因此能夠幫助開發者快速地實驗一些硬體功能。

machine模組提供了3個函式和7個類,machine模組提供的函式,如下表所示:

表16.1.1 machine模組提供的函式

machine模組提供的類,如下表所示:

表16.1.2 machine模組提供的類

本章著重介紹machine模組提供的函式,在後續章節將陸續對machine模組提供的部分類進行介紹。

machine模組提供了unique_id()函式,用於獲取Kendryte K210的32位元組唯一ID,unique_id()函式如下所示:

machine.unique_id()

unique_id()函式用於獲取Kendryte K210的32位元組唯一ID,32位元組唯一 ID可以被作為每顆Kendryte K210晶片的“身份證”。

unique_id()函式的使用示例如下所示:

import machine

uid = machine.unique.id()

machine模組提供了reset()函式,用於對Kednryte K210進行軟體復位,reset()函式如下所示:

machine.reset()

reset()函式用於對Kendryte K210進行軟體復位,相當於對板卡進行重啟操作。

reset()函式的使用示例如下所示:

import machine

machine.reset()

machine模組提供了reset_cause()函式,用於獲取Kendryte K210的復位原因,reset_cause()函式如下所示:

machine.reset_cause()

reset_cause()函式可以獲取Kendryte K210本次執行前復位的復位原因,其中復位原因如下表所示:

表16.1.3 復位原因描述表

reset_cause()函式的使用示例如下所示:

import machine

cause = machine.reset_cause()

16.2 硬體設計

16.2.1 例程功能

1.使用unique_id()函式,獲取Kendryte K210的唯一ID,並列印輸出

2.使用reset_cause()函式,獲取Kendryte K210本次執行的復位原因,並列印輸出

3.使用reset()函式,對Kendryte K210進行軟體復位

16.2.2 硬體資源

本章實驗內容,主要講解machine模組中函式的使用,無需關注硬體資源。

16.2.3 原理圖

本章實驗內容,主要講解machine模組中函式的使用,無需關注原理圖。

16.3 程式設計

16.3.1 machine函式

有關machine函式的介紹,請見第16.1小節《machine模組介紹》。

16.3.2 程式流程圖

圖16.3.2.1 machine模組實驗流程圖

16.3.3 main.py程式碼

main.py中的指令碼程式碼如下所示:

import machine
import time

# 獲取唯一ID並列印輸出
uid = machine.unique_id()
print(uid)
print("".join(["%02X" % byte for byte in uid]))

# 獲取復位原因並列印輸出
cause = machine.reset_cause()
def decode_cause(cause):
    if cause == (machine.PWRON_RESET or machine.HARD_RESET):
        return "Pin reset"
    elif cause == machine.WDT_RESET:
        return "WDT0 reset"
    elif cause == machine.WDT1_RESET:
        return "WDT1 reset"
    elif cause == machine.SOFT_RESET:
        return "Software reset"
    else:
        return "Unknow"
print(decode_cause(cause))

# 延時一段時間
time.sleep_ms(500)

# 軟體復位
machine.reset()

可以看到,首先是透過machine.unique_id()函式獲取Kendryte K210的唯一ID,並透過print()函式將其列印輸出,但由於該函式返回的是bytes型別的資料,為了方便檢視,同時將其格式化為十六進位制資料進行列印輸出。

接著是使用machine.reset_cause()函式獲取復位原因,該函式返回的是一個int型別的資料,復位原因對應的int資料都以常量的形式儲存在machine模組中如表16.1.3,在將復位原因轉換為對應的字串後,透過print()函式將其列印輸出。

在最後是使用machine.reset()函式對Kendryte K210進行軟體復位,復位後Kendryte K210將重新啟動,CanMV也將重新執行。

16.4 執行驗證
將DNK210開發板連線CanMV IDE,並點選CanMV IDE上的“開始(執行指令碼)”按鈕後,可以看到“序列終端”輸出了一些資訊,如下圖所示:

圖16.4.1 “序列終端”視窗列印輸出

從“序列終端”的視窗中可以看到,前兩行輸出的是Kendryte K210的唯一ID,值得一提的是,雖然列印輸出了64位元組的唯一ID,但有效的只有前32位元組。可以看到第三行,輸出的是“Pin reset”,說明本次執行前的復位原因是“引腳復位”。

由於在main.py中的最後執行了machine.reset()函式,因此Kendryte K210將會執行一次復位,因此,透過CanMV IDE軟體能觀察到在執行完main.py後,原本處於“已連線”狀態的Kendryte K210裝置變為了“未連線”狀態,如下圖所示:


圖16.4.2 裝置斷開連線

相關文章