安泰电子世界网 首页 Ardunio Raspberry Pi 硬件(十五)

Raspberry Pi 硬件(十五)

2024-11-5 17:08 | 发布者: txc | 查看: 20 | 评论: 0

简介:Raspberry Pi 硬件

正在使用的新式修订代码

注意此列表并非详尽无遗 - 可能存在正在使用的代码不在此表中。有关使用修订代码识别电路板的最佳实践,请参阅下一节。
code校订RAM制造者
900021A+1.1512MB索尼中国
900032B+1.2512MB索尼中国
900092Zero1.2512MB索尼中国
900093Zero1.3512MB索尼中国
9000C1Zero W1.1512MB索尼中国
9020e03A+1.0512MB索尼中国
9020e13A+1.1512MB索尼中国
920092Zero1.2512MB埃姆贝斯特
920093Zero1.3512MB埃姆贝斯特
900061CM11.1512MB索尼中国
A010402B1.01GB索尼中国
A010412B1.11GB索尼中国
A020823B1.21GB索尼中国
A020A0CM31.01GB索尼中国
A020D33B+1.31GB索尼中国
A020D43B+1.41GB索尼中国
A020422B (带BCM2837)1.21GB索尼中国
A210412B1.11GBEmbest
A220422B (带BCM2837)1.21GBEmbest
A220823B1.21GBEmbest
A220A0CM31.01GBEmbest
A320823B1.21GB索尼日本
A520823B1.21GBStadium
A220833V1.31GBEmbest
A02100CM3+1.01GB索尼中国
A031114B1.11GB索尼中国
B031114B1.12GB索尼中国
B031124B1.22GB索尼中国
B031144B1.42GB索尼中国
B031154B1.52GB索尼中国
C031114B1.14GB索尼中国
C031124B1.24GB索尼中国
C031144B1.44GB索尼中国
C031154B1.54GB索尼中国
D031144B1.48GB索尼中国
D031154B1.58GB索尼中国
C03130PI 4001.04GB索尼中国
A03140CM41.01GB索尼中国
B03140CM41.02GB索尼中国
C03140CM41.04GB索尼中国
D03140CM41.08GB索尼中国
902120Zero 2 W1.0512MB索尼中国
C0417051.04GB索尼中国
D0417051.08GB索尼中国

使用修订代码进行电路板识别

在命令行中,我们可以使用以下内容来获取开发板的修订代码:

$ cat /proc/cpuinfo | grep Revision
Revision      : c03111

在上面的这个例子中,我们有一个十六进制修订代码 c03111。将其转换为二进制,我们得到 0 0 0 000 0 0 1 100 0000 0011 00010001 0001。根据上表,已插入空格以显示修订代码每个部分之间的边框。
从最低阶位开始,底部的四个 (0-3) 是板修订号,因此该板的修订版为 1。接下来的八位 (4-11) 是板类型,在本例中为二进制00010001,十六进制 11,因此这是 Raspberry Pi 4B。使用相同的过程,我们可以确定处理器是BCM2711,该板由索尼英国制造,并且具有 4GB 的 RAM。

在程序中获取修订代码

显然,市面上有这么多的编程语言,不可能给出所有语言的例子,但这里有两个关于C和Python的快速例子。这两个示例都使用系统调用来运行 bash 命令,该命令获取 cpuinfo 并将结果通过管道传递到 awk 以恢复所需的修订代码。然后,它们使用位操作从代码中提取 New、Model 和 Memory 字段。

#include 
#include 

int main( int argc, char *argv[] )
{
  FILE *fp;
  char revcode[32];

  fp = popen("cat /proc/cpuinfo | awk '/Revision/ {print $3}'", "r");
  if (fp == NULL)
    exit(1);
  fgets(revcode, sizeof(revcode), fp);
  pclose(fp);

  int code = strtol(revcode, NULL, 16);
  int new = (code >> 23) & 0x1;
  int model = (code >> 4) & 0xff;
  int mem = (code >> 20) & 0x7;

  if (new && model == 0x11 && mem >= 3)  // Note, 3 in the mem field is 2GB
     printf("We are a 4B with at least 2GB of RAM!\n" );

  return 0;
}

在 Python 中也是如此:

import subprocess

cmd = "cat /proc/cpuinfo | awk '/Revision/ {print $3}'"
revcode = subprocess.check_output(cmd, shell=True)

code = int(revcode, 16)
new = (code >> 23) & 0x1
model = (code >> 4) & 0xff
mem = (code >> 20) & 0x7

if new and model == 0x11 and mem >= 3 : # Note, 3 in the mem field is 2GB
    print("We are a 4B with at least 2GB RAM!")

最新评论

友情链接:

返回顶部