Arduino RP2040 Pico 唯一 ID

问题描述 投票:0回答:3

我在 Arduino IDE 上使用 Raspberry pi pico。我正在使用这个库githublink。此链接中有 3 个示例,ArduinoUniqueIDArduinoUniqueID8 不打印任何内容。艾德说

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).

(但 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 
是什么类型,我尝试转换十六进制,但它打印出相同的东西。

如何使用 Arduino 代码找到 pico 的唯一 ID?

c++ arduino raspberry-pi-pico
3个回答
4
投票

Pico(以及大多数 RP2040 板)的唯一 ID 由闪存的序列号确定。 Pico SDK 具有获取该 ID 的函数。您可以使用

flash_get_unique_id(uint8_t* id_out)
直接从闪存中检索它,这就是上面链接的库所做的。相关文档位于此处

或者,您可以从 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)。相关文档位于此处

这些值是十六进制的,来自其 Unique_ID 缓冲区,该缓冲区看起来未正确填充唯一 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();                         
    }

1
投票

“UniqueID: 30 00 33 ”等是unicode字符串“039160E62A8248C348C3”而不是十六进制。

对于 Earls pico 核心,只需将

extern "C" void flash_get_unique_id(uint8_t *p);
添加到您的草图中,您就可以访问上述 UniqueIDdump 示例所需的功能


0
投票

为那些将来寻找相同解决方案的人添加此内容。 Earl 在他的 pico 核心中添加了一个

rp2040.getChipID()
函数,它将提供
char * (c string)
结果。代码片段是:

  // Print out my unique Id
  Serial.print("Unique Id: "); Serial.println(rp2040.getChipID());

这是结果:

Unique Id: E66138528361BB32
© www.soinside.com 2019 - 2024. All rights reserved.