c++ Arduino RP2040皮科唯一ID

wvt8vs2t  于 2022-12-20  发布在  其他
关注(0)|答案(2)|浏览(362)

我正在Arduino IDE上使用Raspberry pi皮科。我正在使用这个库githublink。这个链接中有3个例子,ArduinoUniqueIDArduinoUniqueID8不打印任何东西。Ide说

WARNING: library ArduinoUniqueID claims to run on avr, esp8266, esp32, sam, samd, stm32 architecture(s) and may be incompatible with your current board which runs on mbed_rp2040 architecture(s).

(but GitHub说我们添加了RP2040)
当我尝试使用最后一个例子ArduinoUniqueIDSerialUSB时,它打印了一些东西,但它们不是正确的值。

UniqueID: 30 00 33 00 39 00 31 00 36 00 30 00 45 00 36 00 32 00 41 00 38 00 32 00 34 00 38 00 43 00 33 00 
UniqueID: 34 00 38 00 43 00 33 00

正确的唯一ID值如下:(我用micropython打印了这些)

hex value of s = e660a4931754432c
type s = <class 'bytes'>
s =  b'\xe6`\xa4\x93\x17TC,'

我甚至不知道34 00 38 00 43 00 33 00是什么类型,我试图转换十六进制,但它打印相同的东西。
我如何找到皮科的唯一ID与Arduino代码?

xxslljrj

xxslljrj1#

皮科(以及大多数RP2040板)的唯一ID由闪存的序列号决定。Pico SDK具有获取该ID的函数。您也可以使用flash_get_unique_id(uint8_t* id_out)直接从闪存中检索该ID,这是上面链接的库所做的。相关文档为here
或者,您可以从MCU获取唯一ID。检索ID的两个函数是pico_get_unique_board_id(pico_unique_board_id_t* id_out)(以十六进制数组的形式返回ID)或pico_get_unique_board_id_string(char* id_out, uint len)(以字符串的形式返回ID)。相关文档是here
这些值是十六进制的,来自Unique_ID缓冲区,看起来好像是用Unique id错误地填充了缓冲区。下面的代码应该可以满足您的需要。

uint8_t UniqueID[8];
   void UniqueIDdump(stream)                      
    {
        flash_get_unique_id(UniqueID);                                             
        stream.print("UniqueID: ");       
        for (size_t i = 0; i < 8; i++) 
        {                                         
            if (UniqueID[i] < 0x10)               
                stream.print("0");                
            stream.print(UniqueID[i], HEX);      
            stream.print(" ");                          }                                         
        stream.println();                         
    }
esbemjvw

esbemjvw2#

“唯一ID:30 00 33“等是一个非十六进制的Unicode字符串“039160 E62 A8248 C348 C3”。
同样,对于Earls皮科内核,只需添加“外部“C”void flash_get_unique_id(uint8_t *p);'添加到草图中,您就可以访问上述UniqueIDdump示例所需的函数

相关问题