资讯
HOME
资讯
正文内容
nand复位 国产替代 真实还原 拆海康AI云台摄像机
发布时间 : 2024-11-24
作者 : 小编
访问数量 : 23
扫码分享至微信

国产替代 真实还原 拆海康AI云台摄像机

星星之火 可以燎原

当断供与限制成为常态

安防巨头如何落地国产替代

本期硬核拆评 对准海康萤石AI云台摄像头

我们探究硬件设计之美与之尬

同时盘点最真实的国产替代现况

视频加载中...

出镜 | 与非网行业分析师 曹顺程

制作 | 与非网视频团队

视频亮点提示抽:

01' 02"

选品理由:颜值满分,性能碾压,但价格“美丽”

01' 57"

高价背后:哪项摄像头功能附加值可达近300元

02' 52''

暴力拆解:内部构件大集结,硬件发烧友精神食粮

04' 40"

追根溯源:后实体清单时代,芯片本土替代率实测

05' 30"

欲盖弥彰:电路板上被屏蔽罩遮住的到底是什么

07' 13"

海康自产:号称摄像头内部最重要芯片出自海康

08' 17''

盖棺定论:干货永远不怕晚,老曹总结陈词时间

看过我之前视频的小伙伴可能有这样的疑问,前几期我已经拆过一个萤石的网络摄像头(点击查看),为何再来一次?拿钱了?当然是no!

首先,两者定位不同,前一次拆解的是入门款,这个是高端款;其次,功能不同,前一个仅仅是基础的监视,这个是监视加 AI 人脸检测等等等等功能;再者,性能也不同,前者只能看完整的画面,但是对于细节模糊不清;而这个可以自动对面部追踪放大看清楚细节,尤其是人脸,所以,相对于前一期拆解的摄像头,这个无论是在功能还是性能上都是碾压的,当然价格上同样碾压,599 元。

在普遍 200 左右档次的网络摄像头大军中,这个 599 的售价注定了要走些不同寻常路。首先是外观,造型更加丰满圆润,也更有质感,尤其底座采用了银灰色阳极氧化工艺的金属外壳,在保持颜值、质感的同时还具备良好的散热性。如果仅仅是外观的提升,肯定无法支撑它大幅提升的售价?那还有什么呢?

可以看下上图这个官方提供的摄像机参数表,在较为平淡的参数中有几个字特别亮眼,人脸识别。别小看这四个字,在我看来就是这四个字支撑了这个产品敢贵几百块钱的理由;其次它也支持 5G 频段的 WiFi,这在入门级的网络摄像头上是看不到的,至于其它参数,就比较平常了,尤其是还搭载百兆的以太网口,这是看不起我家的千兆电信网络吗?(电信请打钱!)

所以,归根结底,这个摄像机的溢价似乎都在人脸识别这 4 个字上,那人脸识别是如何实现的?或者应该说是什么硬件方案支撑了这个摄像机的人脸识别功能?这玩意到底值不值599?为了一探究竟,拆个机吧。

拆机全程 图文呈现

费了好大劲终于拆解完了,来看下整个结构布局以及硬件方案。

我暂且将它们分为底板,核心板,摄像头模组,步进电机。

步进电机的话:一个控制水平方向转动,视角可达 360°;另一个的话控制垂直方向转动,视角在 125°,其中垂直方向有个主要的功能就是隐私保护,这对于摄像头来说非常重要,尤其是假设你想将摄像头装在卧室。

摄像头模组:除了 CMOS 图像传感器外,此摄像头模组的红外和自然光摄像切换的硬件电路和其它系列的区别不大,内置了一个电机械控制开关,上电线圈产生磁场吸合开关来控制镜片的选择,一个是普通的透镜片,另一个是红外滤波镜片,可以阻挡自然光,此时配合红外灯,就形成了红外摄影。

摄像头模组镜头驱动芯片是采用国产的 MS41919,三亚微科技的产品,主要用于网络摄像机和监控摄像机的镜头驱动,通过电压驱动方式以及扭矩纹波修正技术,实现了超低噪声微步驱动。

摄像头底板上的电路包括百兆以太网口电路、MicroUSB 供电口电路、复位按键电路以及双频 WiFi 电路。

百兆网口采用的网络变压器是联泰兴的 HST-0041SAR,同样是国产器件。

联发科的 WiFi 方案采用的是 MT7618,双频WiFi方案,支持 5G 频段。

核心板跟底板是通过两个 B2B 连接器组合在一起。核心板上搭载两颗美光的 256MB 的 DDR3 内存,正反两面,也就是总共 512MB,并且内存上都是有屏蔽罩的,上图中已经取下,这里可能有人会问,那为什么放屏蔽罩?

算起来这个摄像机总共有 3 个屏蔽罩,其中两个分别给了两个 DDR3,一个是给了联发科的 WiFi 芯片,WiFi 芯片这边容易理解,无线信号容易受到干扰,通过屏蔽罩隔绝电磁干扰。但是你可能会发现很多路由器上的无线芯片都没有搭载屏蔽罩,这里主要还是因为 摄像头的 SoC 与 DDR3 电路距离 WiFi 芯片电路太近了,就差脸贴脸了,而 SoC 与内存之间的通信频率很高,会辐射电磁波干扰射频,影响 WiFi 的信号。

核心板上最重要的一颗芯片确定是海康威视的摄像头解决方案的SoC(DP7152003),可以支持H.265/H.264视频压缩,最重要的是内部集成了 AI 功能,虽然没有具体的参数,但是给出了 1.0T 算力的参考值。

现在的疑问是这个 1.0T 给的是抽象的概念还是单纯的就是指具有 1 万亿次的算力,官网表达的比较模糊(模棱两可?),那我当然希望是前者,如果仅仅是指 1T 的算力,那真没值得称道的。

除了海康威视这颗带 AI 功能的重量级SoC芯片,核心板上还有兆易创新的 SPI NAND Flash GD5F2GQ4UB9IG。

瑞昱的百兆以太网口方案 RTL8201F。

写在最后

看完拆解,回到我一开始的问题上,相信不少人都有这样的疑问,这个人脸识别支撑得起 599 元的售价吗?

如果是拆解前,我的答案肯定是否定的,但是经过拆解,才能发现这个产品的设计制造的用心之处无法简单的去用一个人脸识别功能来评判,这个产品无论是在结构复杂度上,还是器件选型上,都是有别于入门级摄像头的配置。但同样的,即便是面向高端领域的网络摄像头,国内企业产品方案芯片的国产化趋势也愈加明显,相信在以后的电子产品中我们能看到越来越多的国产器件方案,长此以往,余总那句话还是比较有说服力的“没有人能熄灭漫天星光”。

嵌入式开发中的C语言技巧你知道多少?

想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。这一期我们来分享一下在嵌入式开发中常用的C语言技巧。看完这一篇文章,至少可以让你的C语言向前迈进一大步。

1.指向函数的指针

指针不单单是指向变量、字符串、数组,它还能够指向函数。在C语言中允许将函数的入口地址赋值给指针。这样就可以通过指针对函数进行访问。还可以把函数指针当成参数来传递。函数指针可以简化代码,减少修改代码的工作量。接下来我们通过一些具体的例子来了解一下。

/*函数指针简单讲解

*通过指向函数的指

*针调用比较两个数

*大小的程序

*/

#include

using namespace std;

/*比较函数声明*/

int max(int,int);

/*指向函数的指针声明(此刻指针未指向任何一个函数)*/

int (*test)(int,int);

int

main(int argc,char* argv[])

{

int largernumber;

/*将max函数的入口地址赋值给

*函数指针test

*/

test=max;

/*通过指针test调用函数max实

*现比较大小

*/

largernumber=(*test)(1,2);

cout<<><>

return 0;

}

int

max(int a,int b)

{

return (a>b?a:b);

}

通过上面这部分大家可以了解到函数指针其实和变量指针、字符串指针是大同小异的。如果大家理解了这个小程序,那么理解起下面这个有关Nand flash的源代码就会容易一些。

typedef struct {

void (*nand_reset)(void);

void (*wait_idle)(void);

void (*nand_select_chip)(void);

void (*nand_deselect_chip)(void);

void (*write_cmd)(int cmd);

void (*write_addr)(unsigned int addr);

unsigned char (*read_data)(void);

}t_nand_chip;

static t_nand_chip nand_chip;

/* NAND Flash操作的总入口,它们将调用S3C2410或S3C2440的相应函数 */

static void nand_reset(void);

static void wait_idle(void);

static void nand_select_chip(void);

static void nand_deselect_chip(void);

static void write_cmd(int cmd);

static void write_addr(unsigned int addr);

static unsigned char read_data(void);

/* S3C2410的NAND Flash处理函数 */

static void s3c2410_nand_reset(void);

static void s3c2410_wait_idle(void);

static void s3c2410_nand_select_chip(void);

static void s3c2410_nand_deselect_chip(void);

static void s3c2410_write_cmd(int cmd);

static void s3c2410_write_addr(unsigned int addr);

static unsigned char s3c2410_read_data();

/* S3C2440的NAND Flash处理函数 */

static void s3c2440_nand_reset(void);

static void s3c2440_wait_idle(void);

static void s3c2440_nand_select_chip(void);

static void s3c2440_nand_deselect_chip(void);

static void s3c2440_write_cmd(int cmd);

static void s3c2440_write_addr(unsigned int addr);

static unsigned char s3c2440_read_data(void);

/*初始化NAND Flash */

void nand_init(void)

{

#define TACLS 0

#define TWRPH0 3

#define TWRPH1 0

/*判断是S3C2410还是S3C2440 */

if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002))

{

nand_chip.nand_reset = s3c2410_nand_reset;

nand_chip.wait_idle = s3c2410_wait_idle;

nand_chip.nand_select_chip = s3c2410_nand_select_chip;

nand_chip.nand_deselect_chip = s3c2410_nand_deselect_chip;

nand_chip.write_cmd = s3c2410_write_cmd;

nand_chip.write_addr = s3c2410_write_addr;

nand_chip.read_data = s3c2410_read_data;

/*使能NAND Flash控制器,初始化ECC,禁止片选,设置时序 */

s3c2410nand->NFCONF = (1<

}

else

{

nand_chip.nand_reset = s3c2440_nand_reset;

nand_chip.wait_idle = s3c2440_wait_idle;

nand_chip.nand_select_chip = s3c2440_nand_select_chip;

nand_chip.nand_deselect_chip = s3c2440_nand_deselect_chip;

nand_chip.write_cmd = s3c2440_write_cmd;

#ifdef LARGER_NAND_PAGE

nand_chip.write_addr = s3c2440_write_addr_lp;

#else

nand_chip.write_addr = s3c2440_write_addr;

#endif

nand_chip.read_data = s3c2440_read_data;

/*设置时序 */

s3c2440nand->NFCONF = (TACLS<

/*使能NAND Flash控制器,初始化ECC,禁止片选 */

s3c2440nand->NFCONT = (1<

}

/*复位NAND Flash */

nand_reset();

}

这段代码是用于操作Nand Flash的一段源代码。首先我们看到开始定义了一个结构体,里面放置的全是函数指针。他们等待被赋值。然后是定义了一个这种结构体的变量nand_chip。然后是即将操作的函数声明。这些函数将会被其他文件的函数调用。因为在这些函数里一般都只有一条语句,就是调用结构体的函数指针。接着往下看,是针对两种架构的函数声明。然后在nand_init函数中对nand_chip进行赋值,这也就是我们刚刚讲过的,将函数的入口地址赋值给指针。

现在nand_chip已经被赋值了。如果我们要对Nand进行读写操作,我们只需调用nand_chip.read_data()或者nand_chip.write_cmd()等等函数。这是比较方便的地方,另外,这个代码的移植性很强,如果我们又用到了一种芯片,我们就不需要改变整篇代码,只需在nand_init函数中增加对新的芯片的判断,然后给nand_chip赋值即可。所以我说函数指针会使代码具有可移植性,易修改性。

2.C语言操作寄存器

在嵌入式开发中,经常要使用寄存器,对寄存器进行写入,读出等等操作。每个寄存器都有自己固有的地址,通过C语言访问这些地址是一个很重要的环节。

#define GSTATUS1 (*(volatile unsigned int *)0x560000B0)

在这里,我们举一个例子。这是一个状态寄存器的宏定义。首先,通过unsigned int我们能够知道,该寄存器是32位的。因为要防止程序执行过程中直接从cache中读取数据,所以用volatile进行修饰。每次都要重新读取该地址上的值。首先(volatile unsigned int*)是一个指针,我们就假设它为p吧。它存储的地址就是后面的0x560000B0,然后取这个地址的值,也就是*p,所以源代码变成了(*(volatile unsigned int *)0x560000B0),接下来我们就能直接赋值给GSTATUS1来改变地址0x560000B0上存储的值了。

/* NAND FLASH (see S3C2410 manual chapter 6) */

typedef struct {

S3C24X0_REG32 NFCONF;

S3C24X0_REG32 NFCMD;

S3C24X0_REG32 NFADDR;

S3C24X0_REG32 NFDATA;

S3C24X0_REG32 NFSTAT;

S3C24X0_REG32 NFECC;

} S3C2410_NAND;

static S3C2410_NAND * s3c2410nand = (S3C2410_NAND *)0x4e000000;

volatile unsigned char *p = (volatile unsigned char *)&s3c2410nand->NFSTAT;

有的时候,我们会看到类似这样一种情况的赋值。其实这和我们前面说的差不多。只不过这里是在定义了指针的同时对指针进行赋值。这里首先定义了结构体S3C2410_NAND,里面全部是32位的变量。又定义了这种结构体类型的指针,且指向0x4e000000这个地址,也就是此刻s3c2410nand指向了一个实际存在的物理地址。s3c2410nand指针访问了NFSTAT变量,但我们要的是它的地址,而不是它地址上的值。所以用&取NFSTAT地址,这样再强制转换为unsigned char型的指针,赋给p,就可以直接通过p来给NFSTAT赋值了。

本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!

相关问答

and 和密码忘记怎么 复位 ?

若忘记了"and"和密码,可以尝试按照以下步骤进行复位:首先,通过电子邮件、短信或者电话联系"and"的客服支持团队,提供账户和身份验证信息以确认身份。其次...

RESET中文什么意思?

resetvi.重置;清零vt.重置;重新设定;重新组合n.重新设定;重新组合;重排版短语HardReset绝境重启;硬启动;硬重置;硬复位resetbutton重置键;...

平板电脑 复位键 功能是什么??-ZOL问答

复位键是直接切断电源用机械原理将电池与电器元件分开软件难免有死机的时候万一死机了也不能让平板一直亮着啊有用(0)回复hcw_816建议长按电源键10秒以...

三菱plc指令中的RST是什么意思?

RST是Reset的缩写,这是个复位指令,用于复位位软元件的状态到off状态,复位定时器与计数器和数据寄存器到0的状态。PLC的常见基本指令:1、LD:取指令(常开触...

尺骨骨折手术钢板固定。13个月没长。_千问健康

尺骨骨折手术钢板固定。13个月没长。病情描述(发病时间、主要症状等):求购八仙接骨宝

power off 反义词?

反义词是Poweron,表示开机,例如:1.Andthepaperdesignedapoweroncircuitforclocksystem,whichenhancedt...

变频器,点动运转,指示灯,圆织机,软带圆织机,弹簧钩 复位 短...

[最佳回答]点动控制Motortomovethecontrol,连续运行控制continuousoperationcontrol,断纱自动停车控制parkingcontrol,automaticp...

PLC基本指令中,ANI,OR,ORI,ANB,MRD都是什么意思呢?

20个基本指令:LD:取指令(常开触点)LDI:取反指令(常闭触点)AND:串指令(常开触点)ANI:串反指令(常闭触点)OR:并指令(常开触点)ORI:并反指令...20个基本指...

宝马保养灯怎么 复位 ?

[最佳回答]宝马保养灯的复位方法如下:1。关闭点火开关,关闭火焰;2.按下仪表板左下角的按钮;3.打开点火开关;4.按住左下角的按钮5秒钟,直到出现“OILSERVICE”...

上颌窦炎怎么治疗_千问健康

这位专家,你好`!我的病情如下:这段时间我做了CT跟核磁共震都显示我上颌窦黏膜增厚其他都正常医生诊断为上颌窦炎但里面没有脓性物只开了一些消炎药给我但我常常感...

 不安全行为  万年花城论坛 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部