• 20
  • 6月

这一两年,智能穿戴与智能家居突然就火起来了。虽然还没到那种燎原的程度,但是很明显,Hanny已经感觉到那一股热气迎面而来了。

说到智能穿戴,其实就是蓝牙的BLE技术+传感器的一个应用吧。智能家居呢,就是WIFI为中心的一个无线控制吧。

其实有时候,Hanny也在想,慢慢是不是就,WIFI和蓝牙各发挥所长,建立一个以WIFI为控制中心,蓝牙为传端器的这么一个智能服务中心呢?

关于智能穿戴,Hanny总结了一下,大约有以下产品的方向:

1、健康类:手环、血压计、血糖仪、体温计、其它测量仪、戒烟产品、腕表、XX云之类的控制中心产品、头戴式产品、耳机

2、运动类:手环、腕表、计步器、路线轨迹类、定位器

3、安全类:防丢器、防盗器、定位器

4、娱乐类:拍照器、遥控、耳机、音箱、游戏手柄(或其它设备)、手表、其它饰品、情趣用品

再再总结一下,就是:男人好色、女人爱美、儿童益智、老人健康。

  • 17
  • 5月

我果然是一个不太适合做推广、做业务的人。

做了很多东西,但是很多都让它静悄悄地死掉了,没能好好地运做起来,没能好好地推开来。

走在很多东西的前端,但是又是自己把它埋葬了。

从2002年开始,稀里糊涂地做了好多个网站了,没有一个真正地做成功了。

也和无数的人交换过友情链接了,但是也一个一个倒下,放弃了。

索性,关闭了这个功能吧。博客就做为自己技术和心情整理的一个场所吧。

可能会有点对不起来留着我的链接的那些朋友们了。

  • 14
  • 4月

最近由于项目需要,做了iPhone新的lighting接口的播放器开发,也稍微了解了一下MFI的整个认证流程。

iPhone5采用了最新的lighting接口,说是lighting,其实就是把usb接口的 DP DM 信号顺序重排一下,正反都可以插而已,其实也没什么特别的。

旧的Dock的播放器,一般都采用模拟+UART控制来实现播放。而新的接口,只有DP DM信号,也就是说只能采用USB通信,而且最可误的就是必须要有苹果的认证IC,经过认证后才能进行播放。

在音箱播放过程中,也和传统的USB音箱实现方法不同。传统的USB音箱,音箱是做为USB Speaker从机设备,电脑做为主机设备来进行播放。而苹果的播放,则是iPhone做为USB MIC从机,音箱做为主机来进行播放。这一点,和安卓的AOA协议有些类似。

因此,第一步,主要就是对苹果这个USB MIC设备的枚举,以及相关的采样控制等操作了。

然后再谈谈认证过程。

首先,我们需要一颗苹果的认证IC,一般是IIC的接口。从认证IC中读取版本信息等。

然后,对iPhone发送 StartIDPS 命令,同时获取 设备的 lingo(命令分组) 支持,通过 setfidtoken 告知苹果我们的版本信息等。再发送 EndIDPS。这样,第一步就完成了。

接下来,第二步,苹果发起 GetDevAuthenticationInfo 请求,我们需要从认证IC中读取Cert证书信息,通过命令RetDevAuthenticationInfo回给iPhone。

第三步,苹果确认证书后,发送GetDevAuthenticationSignature命令,同时会发送Challenge数据。我们将接收到的Challenge数据,写入认证IC的Challenge寄存器,等待计算完成后,从认证IC中读出Signature数据,通过RetDevAuthenticationSignature回应给iPhone。等待苹果确认后,就可以播放音乐了。

  • 24
  • 3月

只要活着,就一定要努力地变,努力地尝试。这个就是Hanny这几年来最深的感触的。

社会是一直在变的,什么都一直在变,所以要时刻做好“变”的准备。每隔一断时间,就会出现一次巨大的变化,这时候就要看你是否能够充分去抓住这个“变”的机会了。没有什么能够一直安定地。。最近,Hanny就把注了4年多的域名给迁出来了,这也算一次变化。

还有,就是要敢于尝试,不要有任何顾虑。有什么想法,就一定要大胆地去做。不然,在犹豫的时候,机会可能就这样流失了。如果自己还有梦想的话,就一定要坚持下去。

就是这样。

  • 25
  • 2月

开发51时,选择IAR,而不选择Keil,一般会有两个理由:
1、IAR的编译器十分灵活,尤其是XCL的文件配置,几乎比GCC的ld文件更加强大。
2、IAR的切BANK机制了。

说到IAR的切BANK机制,就要说起IAR的版本了。
在720H以前,都是旧的BANK机制,而到了750A以后的版本,基本都是新的BANK机制了。由于这中间几个版本找不到软件下载,根据官方网站上的说明,Hanny暂且判断IAR 730A为使用新的BANK机制的一个分届版本。

在旧的BANK机制中,切BANK是这样的:
MOV DPTR, #func_ptr<br />
MOV A, #bank_num<br />
LCALL ?B_CALL

主要就是,将目标函数放入DPTR,BankNum放入 A寄存器,然后调用公共区的?B_CALL函数进行切换

而新的BANK机制中,切BANK是这样的:
LCALL func?relay
然后,relay接口如下:
func?relay: LCALL XXXX<br />
DB func_ptr


大约这样,具体可参考IAR帮助。

其实,Hanny更喜欢IAR720H的机制。何解?IAR官方虽说新的机制更好。理论上,新的机制,在多次调用时确实减少了程序的总大小,但是却浪费了宝贵的COMMON CODE区。新的版本会给每个函数生成 relay 入口,存放在 BANK_RELAYS 段中。而 BANK_RELAYS 必须放在公共区。

一般来说,旧的版本在新的IAR下编译有可能出以下错误:
Error: Segment BANK_RELAYS must be defined in a segment definition option (-Z, -b or -P)

这时,只能用回720H的版本就OK了。