本文主要是关于mt7621和qca9558的相关介绍,并着重对mt7621和qca9558进行详尽的对比分析。
mt7621和qca9558的差距
mt7621 比9558 强多了。不是一个档次的。你可以上openwrt官网看看,我给你截了个图。你就很明了了。最后一栏越高越好。9558比mt7620a好一点。mt7621应该面对的竞争对手是bcm4708/4709或者高通的ipq8064。但这只是mtk的愿望,7621的表现离这两款的差距还是有点大,所以后来出了个mt7623,但是芯片发布了一年多了,到现在市场还没出现一款消费级别的路由用此芯片,我估计还是mtk的老问题。
浅谈mt7621应用
openwrt的最新kernel(3.18.23)已经能够支持32m spi flash的读写以及擦除操作。然而,可能是系统考虑不周,亦或是mt7621系统的bug,在配置了w25q256的mt7621开发板系统上,无法soft reset!经过查阅相关资料,发现,mt7621默认支持24bit(3byte)的spi地址模式,而要支持32m以上的spi flash,则必须切换到32bit(4byte)地址模式。在soft reset的时候,spi停留在了32bit模式,没有切换回默认的24bit模式,导致reset后,mt7621在默认的24bit模式,无法和32bit模式的spi通讯,系统死机。
在linux源代码kernel目录下,有一个reboot.c文件,里面暴露了一个register_reboot_notifier方法,可以让kernel中的代码有机会获得reboot的通知,当我们继续分析reboot.c的代码时,会发现更有意思的东西:
/**
* kernel_restart - reboot the system
* @cmd: pointer to buffer containing command to execute for restart
* or %null
*
* shutdown everything and perform a clean reboot.
* this is not safe to call in interrupt context.
*/
void kernel_restart(char *cmd)
{
kernel_restart_prepare(cmd);
migrate_to_reboot_cpu();
syscore_shutdown();
if (!cmd)
pr_emerg(“restarting system\n”);
else
pr_emerg(“restarting system with command ‘%s’\n”, cmd);
kmsg_dump(kmsg_dump_restart);
machine_restart(cmd);
}
在kernel_restart中,又调用了kernel_restart_prepare方法:
void kernel_restart_prepare(char *cmd)
{
blocking_notifier_call_chain(&reboot_notifier_list, sys_restart, cmd);
system_state = system_restart;
usermodehelper_disable();
device_shutdown();
}
device_shutdown在drivers/base/core.c中实现:
/**
* device_shutdown - call -》shutdown() on each device to shutdown.
*/
void device_shutdown(void)
{
struct device *dev, *parent;
spin_lock(&devices_kset-》list_lock);
/*
* walk the devices list backward, shutting down each in turn.
* beware that device unplug events may also start pulling
* devices offline, even as the system is shutting down.
*/
while (!list_empty(&devices_kset-》list)) {
dev = list_entry(devices_kset-》list.prev, struct device,
kobj.entry);
/*
* hold reference count of device‘s parent to
* prevent it from being freed because parent’s
* lock is to be held
*/
parent = get_device(dev-》parent);
get_device(dev);
/*
* make sure the device is off the kset list, in the
* event that dev-》*-》shutdown() doesn‘t remove it.
*/
list_del_init(&dev-》kobj.entry);
spin_unlock(&devices_kset-》list_lock);
/* hold lock to avoid race with probe/release */
if (parent)
device_lock(parent);
device_lock(dev);
/* don’t allow any more runtime suspends */
pm_runtime_get_noresume(dev);
pm_runtime_barrier(dev);
// manfeel, add debug info
//dev_info(dev,“search shutdown method.。.\n”);
if (dev-》bus && dev-》bus-》shutdown) {
//if (initcall_debug) manfeel
dev_info(dev, “shutdown\n”);
dev-》bus-》shutdown(dev);
} else if (dev-》driver && dev-》driver-》shutdown) {
//if (initcall_debug) manfeel
dev_info(dev, “shutdown\n”);
dev-》driver-》shutdown(dev);
}
device_unlock(dev);
if (parent)
device_unlock(parent);
put_device(dev);
put_device(parent);
spin_lock(&devices_kset-》list_lock);
}
spin_unlock(&devices_kset-》list_lock);
async_synchronize_full();
}
通过阅读代码,我们不难发现,在device_shutdown中,枚举了设备的shutdown方法,如果存在该方法,则会调用之。
于是,32m spi flash的reset方法喷薄而出。
解决办法
转到drivers/mtd/devices/m25p80.c
修改如下代码:
static int m25p_remove(struct spi_device *spi)
{
struct m25p *flash = spi_get_drvdata(spi);
// manfeel note: add spi flash reset code
flash-》command[0] = 0x66;
spi_write(flash-》spi, flash-》command, 1);
flash-》command[0] = 0x99;
spi_write(flash-》spi, flash-》command, 1);
/* clean up mtd stuff. */
return mtd_device_unregister(&flash-》mtd);
}
static struct spi_driver m25p80_driver = {
.driver = {
.name = “m25p80”,
.owner = this_module,
},
.id_table = m25p_ids,
.probe = m25p_probe,
.remove = m25p_remove,
// manfeel, add shutdown method to reset spi flash
.shutdown = m25p_remove,
/* revisit: many of these chips have deep power-down modes, which
* should clearly be entered on suspend() to minimize power use.
* and also when they‘re otherwise idle.。.
*/
};
结语
关于mt7621和qca9558的相关介绍就到这了,如有不足之处欢迎指正。
相关阅读推荐:ipq8064和mt7621两款soc介绍
AT&T公司正在努力争取在明年年中实现5G的全国覆盖
立功科技荣获广州市“工业软件十强企业”称号
我国动力电池回收业的破解之道
中国芯片终于破冰,芯片技术不再落后于其他国家
工业物联网在能源行业的创新与发展
MT7621和QCA9558的差距 浅谈MT7621应用
虹膜识别:最可靠的生物特征
研华AIW-210和AIW-211 ,工业GNSS解决方案新品分享
赛灵思新CEO首秀 推新一代的FPGA架构ACAP
从颜色怎样判断pcb的好坏
一杆多用!智慧灯杆亮相重庆城市智慧公园
热插拔CompactPCI总线
为什么应用需求已超越了信标所能提供的
全球半导体行业寒冬来临:4月销售额同比下跌跌近15%
光电耦合器的隔离作用是什么?
优恩-放电管有哪几种类型?分别有什么优势?
海思麒麟芯片明年将回归?不实!
铅蓄电池短路现象及原因
三月深圳|2023 ITES大幕将启!六大主题看点揭晓
物联网智能网关的应用领域都有哪些