#|抠门的 WiFi 芯片厂家,抠门的程序员

无线网卡 下图是常见的无线网卡
#|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

使用方法 单单一个无线网卡是无法正常工作的,它必须插在一台主机上,并且这台主机要安装网卡对应的驱动程序,才能让它正常工作。
软硬件剖析 【#|抠门的 WiFi 芯片厂家,抠门的程序员】当我还是 WiFi 小白的时候(现在是大白),常常想,我手中的这张 USB 无线网卡,我不把它插在电脑上,我直接把它插在手机充电器上,它能工作吗?
#|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

答案显然是否定的,接下来我们就一起分析下无线网卡的构造,以及其工作所需要的条件。
传统嵌入式设备硬件结构 #|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

CPU 将程序从 FLASH 加载到 RMA 中运行。RAM 和 FLASH 缺一不可,没有 RAM,CPU 直接从 FLASH 读取指令将会严重影响 CPU 效率,甚至有些 FLASH 无法按字节寻址,也就无法满足 CPU 取指令的要求;而没有 FLASH,设备掉电后程序和数据就丢失了,再次开机将无法正常工作,FLASH 存储的一般是这颗芯片的 firmware。
抠门的 WiFi 芯片厂家 从公司角度出发,都追求自家产品能够用最小的成本换取最大的利益,WiFi 芯片厂家也不例外,并且做到了极致。他们思索着,上面的硬件结构中,还能省去什么以节省成本呢?最后被他们想出来了:去掉 FLASH。因为他们知道,WiFi 芯片是不能单独工作的,必须要插在主机上进行工作,那么就砍掉 WiFi 芯片上的 FLASH,让主机帮忙存储 firmware。事实上,现在很多 WiFi 芯片都是这么干的。
BCM43455 我们以树莓派 3B+ 上的 WiFi 芯片 BCM43455 举例,其内部只有 CPU 和 RAM,没有 FLASH。而 WiFi 芯片的 firmware 是存放在主机的磁盘中,由 WiFi 芯片厂家提供,一般和驱动程序一起打包对外发布,甚至有些芯片的 firmware 是存在于驱动内部的。用户需要做的就是下载 WiFi 芯片的 firmware 和驱动程序。对于 BCM43455 而言,它们分别是 brcmfmac43455-sdio.bin、brcmfmac.ko(Linux 环境)。
#|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

整个工作流程是这样的,主机安装驱动 brcmfmac.ko,驱动会到指定目录下读取 brcmfmac43455-sdio.bin 文件,并将其传送给 BCM43455,BCM43455 会将其放在自己的 RAM 中去运行。对于 WiFi 芯片而言,这种方式和从自身的 FLASH 中加载 firmware 到 RAM 效果是一样的,所以索性就省掉了自身的 FLASH。而对于主机而言,由于拥有非常大的磁盘空间,存储一个几 MB 大小的 firmware 并不会产生负担。
抠门的程序员 本来还想,这些 WiFi 芯片厂家真是的,一颗 FLASH 都不想多加,还借助人家主机上的磁盘,可真抠门。但转念一想,作为程序员,特别是之前开发单片机程序,自己又何尝不抠门呢?还记得当时写程序时,能用 uint_8 类型的变量,绝不用 uint_16;数组大小能用 10 的,绝不用 15;甚至宁愿牺牲运行效率来降低代码大小,将结构体设置为按字节对齐。编译完程序后时常关注程序大小,生怕哪一天超出了单片机的 FLASH 大小范围。
抠门成就极致 但是,这种抠门并没有不好,反而是这种追求极致的思想,造就了无数不可能。举个例子,
我们都玩过超级玛丽,它有很多关卡,可以玩很久,但是它的大小只有 40KB,这就是程序员抠门所成就的极致。
例如,所有左右对称的图片都只存一半
#|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

#|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

草垛和云朵使用的是相同的图案,只是要改变下颜色就可以了。(小伙伴们直呼被骗惨了。。。)
#|抠门的 WiFi 芯片厂家,抠门的程序员
文章图片

把过关的音效快进 6 倍就是吃到蘑菇变身时的音效,等等。
正是这些抠门造就了这么多伟大的成就,不是吗?

    推荐阅读