哦耶路由器解析下篇 整机拆解及功能解析
拆解及配置解析:
哦耶路由器拆机还是相当容易的,背面标签的左右两侧各有一颗钉子,也是全机身固定上仅有的两颗钉子,以白色胶垫隐藏,其中一个贴有易碎贴,表明拆开之后将不受厂商的三包服务。
卸掉钉子之后通过撬棒沿缝隙搞定上下右三边共计9个塑料卡扣就可以掀开前盖看到主板全貌了。主板布局上看起来还是比较紧凑的,限于面积问题没有发现单独的无线芯片的焊点,说明这款哦耶路由器此后不会出现双频升级版本。
接下来我们看一下主要芯片和接口,存储颗粒芯片为16MB SPI闪存和128MB DDR2内存的组合,属于同价位路由器产品的正常规格,但远远超越其数据传输的规格,看起来是为了加强对同方案其他路由产品固件的兼容性。其中内存颗粒来自宝岛厂商南亚科技,闪存颗粒来自华邦,同样是宝岛企业。
内存(左)闪存右芯片特写
主控芯片同样是台系大厂出品,联发科技MT7620A,也是同价位路由器产品广泛采用的主控方案,支持最高双频ac1200规格和硬件NAT,集成2.4GHz无线和百兆网口驱动功能,特点是发热很少,甚至无需提供散热片。MT7620A主要用于和MT7610E等5GHz无线芯片组合成双频路由方案,但由于哦耶路由器虽然是N300规格,配备的128MB内存却并非MT7620N所能满足(最大支持64MB),故而这里还是使用了MT7620A。
主控芯片特写
电源管理芯片,型号FR9886,来自同样是台系企业的天钰科技,最大支持2.5A的负载,但哦耶路由器只有1A的供电。
电源管理芯片特写
包装盒参数表内所提到的TTL和JTAG排针,很多产品为了降低成本只留了焊点省去了排针,哦耶这里都留了单排排针,增强了对刷机操作的友好性。
TTL(左)JTAG(右)排针特写
比较感人的是为了立式放置时的平衡,哦耶路由器在外壳前盖的内侧钉了一块生铁用于配重,其实笔者想说这样纯属给自己找麻烦,这还不如直接卧式放置省掉这块铁和底座,价格还可以再降一降。
整体上看哦耶路由器的内部用料还是比较良心的,主要芯片都是台系大厂出品值得信赖,只是为了立式放置所加的生铁配重块甚是感人。
功能解析:
哦耶路由器的宣传很着重于参数和功能,其实这在盒子上就表现得非常明显。
功能上正背两面一共印了13个功能当卖点看起来高大上,吓人一跳,不过保持冷静仔细梳理一下,可以分为三类:
第一类是很常见的功能,大多数路由器都有,包括无线中继、DDNS、VLAN和VPN,中间两者可能一般消费者不太懂,这里解释一下,DDNS是动态DNS解析,将运营商给予路由器的随机IP映射到一个固定域名上以便从外网访问路由器,正常情况下是需要向专门的服务商(国内是花生壳、科迈等)申请服务,这里哦耶官方称自带了DDNS服务还不错,而VLAN则是将路由器所形成的一个局域网划分成多个虚拟局域网以便分开管理的功能;
第二类也是常见功能,不过需要一些硬件依赖,包括SD卡槽、视频监控、打印共享、多功能按钮、DLNA、Samba、USB2.0,其中DLNA和Samba是局域网文件的访问协议,只要路由器能插存储器外设都支持,而视频监控和打印共享看上去略有高大上,需要外设本身可以通过网络驱动,对于路由器本身的要求也只是有USB数据接口而已;
第三类是需要固件功能比较强大才支持的,对应这13点卖点的剩下两个东西,无线广告和MWAN3多拨,其中前者名起得有些招黑,其实就是实现我们在公共WLAN热点上网时的网页验证重定向的功能,并不是给终端设备发广告啊,而MWAN3则是配合OpenWRT系统使用的多次拨号功能,支持单线、多线以及有线无线同时接入,这两个功能只需要刷入开源固件就能支持,而现在能刷OpenWRT、DDWRT固件等的路由器一大把,哦耶的优势也只是原生自带无需手动刷入罢了。
这样分完类其实就清楚了,哦耶路由器看上去这么多卖点,其实任何一个能刷OpenWRT的带USB接口和SD卡槽的产品都支持,并没有什么了不起的。
说完功能,我们再看看参数,参数表已经印在了产品的背面,路由器行业的风气还是以隐藏参数以便缩水为主,主动公布自己的参数对消费者而言值得称赞。主要参数,包括MT7620A主控,16MB+128MB存储组合,N300规格无线和5个百兆网口,支持USB2.0和SD卡槽,这些之前都说过了,这里主要是解说一下供电、控制端口和操作系统三个项目的内容。
供电这里需要注意,规格只有5V1A,参数表上写的是DC接口但实际上是USB,和小米路由器青春版相同,有关供电的问题上篇已经讨论过,对于便携产品或者学生党很有用,但哦耶路由器显然不是一个便携定位的产品,只能增强对于夜间断电的适应性,但它自带USB2.0,这样小的供电规格对于外设支持限制太大,无法胜任比如移动硬盘这种高供电需求的外设,笔者认为这是个设计缺陷;
控制端口一项,这在别家的参数表中极难见到,内容是TTL和JTAG,就是拆解一节看到的两行排针,其实这并不是一个高大上的东西,前者路由器的主板上都有,后者也不少见,其中TTL是路由器进行编程器刷机所用的单排三针接口,单排8针的JTAG功能也类似,用处是写入底层救砖,路由器不常见,多见于安卓手机;
另一个是操作系统,它写的是Linux3.10内核,看起来geek感十足,但实际上,笔者从摸路由器到现在,还没见过哪个路由器系统不是基于Linux内核的,而至于内核版本更无需在意,更新只是为了一些新特性的实现,对于路由器这种简单的计算机系统而言,显然不需要。
在这里小结一下,哦耶路由器的配置和功能也只是百元内路由器的普通水准,同时5GHz的缺失和供电上的缺陷,让它也只能泯然众人,但官方的宣传言过其实,没有卖点硬说成卖点,有过于“出位”之嫌。
总结:
哦耶路由器其实无论从规格还是外观来看都比较普通,不支持5GHz和供电规格太低的问题还让它在同价位性价比的血拼中力不从心,不过自带基本是原版的OpenWRT和u-boot让它在固件功能和刷机友好性上表现不错,对于有很多功能需求但不身怀较高刷机技术的用户而言可算个不错的选择。
STM32驱动PAJ7620手势识别传感器
传感器简介
原相科技公司的 PAJ-7620U2 芯片内集成了光学数组式传感器单元,可以快速准确的对输入信号进行感应和输出处理。内置光源和环境光抑制滤波器,能在黑暗或低光环境下工作。它支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的手势动作识别,以及支持物体接近检测等功能。可大致检测物体体积大小和亮度。使用IIC通信接口可达400KHz通信速率。传感器内部自带 LED 驱动器,传感器感应阵列、目标信息提取阵列和手势识别阵列。传感器工作时通过内部 LED 驱动器,驱动红外 LED 向外发射红外线信号,当传感器阵列在有效的距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据的获取,获取的数据被保存在寄存器中,同时手势识别阵列会对原始数据进行识别处理,最后将手势结果存到寄存器中,用户可根据 I2C 接口对原始数据和手势识别的结果进行读取。
模块原理图
VIN供电输入3.3-5V,GND供电负极,SDA数据线,SCL时钟线,INT中断输出
手势方向定义
STM32F407ZGT6开发板与传感器连接
STM32开发板
手势传感器模块
GND
GND
5V
VIN
PB11
SDA
PB10
SCL
代码片
手势传感器获取感应信息,将结果通过开发版 usart1 串口输给串口调试助手程序显示出来。在 main 函数中,首先对 USART 串口与 KEY 按键进行初始化配置。然后对传感器paj7620u2 进行初始化配置。当对传感器初始化成功后则退出 while 循环,进入第 21 行paj7620u2 传感器功能测试阶段。
int main(void)
{
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
Debug_USART_Config();
EXTI_Key_Config();
printf(" 欢迎使用野火开发板\r\n");
printf(" 手势识别传感器实验\r\n");
while(!paj7620u2_init()) //PAJ7620U2传感器初始化
{
printf("PAJ7620U2 初始化失败!!!\r\n");
delay_ms(600);
}
printf("PAJ7620U2 初始化成功\r\n");
while(1)
{
paj7620u2_sensor_test();//PAJ7620U2传感器测试
}
}
在 test 函数中,第 12 行使用 scanf 函数,使开发板获取来自串口调试助手发出的控制指令。当开发板接收到的指令字符为“1”时,开发板控制传感器进入手势识别工作模式;当接收到的指令字符为“2”时,开发板控制传感器进入接近检测工作模式;当接收的字符既不是“1”也不是“2”时,则打印提示用户输入合法指令。
/**
* @brief PAJ7620U2传感器测试
* @param 无
* @retval 无
*/
void paj7620u2_sensor_test(void)
{
uint32_t ch;
Show_Mode_Message();//显示普通测量模式UI
while(1)
{
scanf("%d",&ch);
printf("接收到字符:%d\r\n",ch);
switch(ch)
{
case 1: Gesrure_test(); break;//手势检测模式
case 2: Ps_test(); break;//接近检测模式
default: printf("请输入合法指令!\r\n"); break;
}
Show_Mode_Message();
}
}
手势识别传感器可以工作在手势识别与接近检测 2 种模式状态下。为了进行工作模式的切换,我们采用了 KEY 按钮外部中端的方式。
1.KEY 外部中断当我们想退出当前的工作模式时,可通过按住 key1 按钮,激发产生 EXTI 中断响应。在 IRQHandler 中断处理函数中,(第 9 行)当接受到中断信号时,变量 flag 赋值为 1。中断代码如下
void KEY1_IRQHandler(void)
{
//确保是否产生了EXTI Line中断
if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET)
{
flag=1;
//清除中断标志位
EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);
}
}
2.手势识别工作模式在 Gesrure_test()函数中,首先对 PAJ7620U2 手势识别检测进行初始化,(第 14 行代码)配置其 gesture_arry 数组的参数值。该数组有使能 9 个手势识别的中断标志输出的配置,初始化完毕后,在 while 循环中一直读取手势中断标志寄存器(第 26 行代码),当识别到相应的手势,手势标志会置 1,读取寄存器标志会自动清 0。根据手势的标志手势结果将被打印到串口上。当按下 KEY 按键,在中断处理函数中标志变量 flag 被赋值 1(第 20 行代码),此时关闭 9 个手势识别的检测输出,退出当前的手势识别测试模式。
/**
* @brief 手势识别测试
* @param 无
* @retval 无
*/
void Gesrure_test(void)
{
uint8_t status,i;
uint8_t data[2]={0x00};
uint16_t gesture_data;
paj7620u2_selectBank(BANK0);//进入BANK0
for(i=0;i<GESTURE_SIZE;i++)
{
GS_Write_Byte(gesture_arry[i][0],gesture_arry[i][1]);//手势识别模式初始化
}
paj7620u2_selectBank(BANK0);//切换回BANK0
printf("按KEY1键退出当前模式\r\n");
while(1)
{
if(flag)
{
flag=0;
GS_Write_Byte(PAJ_SET_INT_FLAG1,0X00);//关闭手势识别中断输出
GS_Write_Byte(PAJ_SET_INT_FLAG2,0X00);
break;
}
status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data[0]);//读取手势状态
if(!status)
{
gesture_data =(uint16_t)data[1]<<8 | data[0];
if(gesture_data)
{
switch(gesture_data)
{
case GES_UP:
printf("Up\r\n"); break; //向上
case GES_DOWM:
printf("Dowm\r\n"); break; //向下
case GES_LEFT:
printf("Left\r\n"); break; //向左
case GES_RIGHT:
printf("Right\r\n"); break; //向右
case GES_FORWARD:
printf("Forward\r\n"); break; //向前
case GES_BACKWARD:
printf("Backward\r\n"); break; //向后
case GES_CLOCKWISE:
printf("Clockwise\r\n"); break; //顺时针
case GES_COUNT_CLOCKWISE:
printf("AntiClockwise\r\n"); break; //逆时针
case GES_WAVE:
printf("Wave\r\n"); break; //挥动
default: break;
}
}
}
}
}
3.接近检测测试Ps_test()函数实现接近检测,获取接近物体的体积大小和亮度的数据。首先对PAJ7620U2 接近检测进行初始化,配置其 proximity_arry 的数组参数值(第 16 行代码),初始化完成后,在 while(1)循环中,读取获取体积大小和亮度的寄存器,并将读取结果打印到串口上。当按下 KEY 按键,在中断处理函数中标志变量 flag 被赋值 1(第 23 行代码),退出当前的接近检测测试模式。
/**
* @brief 接近检测测试
* @param 无
* @retval 无
*/
void Ps_test(void)
{
uint8_t i;
uint8_t data[2]={0x00};
uint8_t obj_brightness=0;
uint16_t obj_size=0;
paj7620u2_selectBank(BANK0);//进入BANK0
for(i=0;i<PROXIM_SIZE;i++)
{
GS_Write_Byte(proximity_arry[i][0],proximity_arry[i][1]);//接近检测模式初始化
}
paj7620u2_selectBank(BANK0);//切换回BANK0
printf("按KEY1键退出当前模式\r\n");
while(1)
{
if(flag)
{
flag=0;
break;
}
obj_brightness = GS_Read_Byte(PAJ_GET_OBJECT_BRIGHTNESS);//读取物体亮度
data[0] = GS_Read_Byte(PAJ_GET_OBJECT_SIZE_1);//读取物体大小
data[1] = GS_Read_Byte(PAJ_GET_OBJECT_SIZE_2);
obj_size = ((uint16_t)data[1] & 0x0f)<<8 | data[0];
printf("obj_brightness: %d\r\n",obj_brightness);
printf("obj_size: %d\r\n",obj_size);
delay_ms(500);
}
}
总结
本实验可以通过挥舞手势直观的了解传感器的手势识别的基本功能以及接近检测的功能。
相关问答
各位吧友换显卡需要重新装 驱动 吗-ZOL问答一般讲,即使更换同一显卡芯片厂商的不同型号显卡,最好重新安装相匹配的驱动程序。例如:将英伟达GT730显卡换成GT1030显卡,尽管英伟达的最新版驱动同时兼容这两...