2018年2月 键盘映射器

二月24日,由于春节放假,开发板到节后才能订购,24日到达。Arduino Leonardo + USB Host Shield,一共50多元。tmk那边的编译工作很简单,在准备烧写时发现Arduino开发板需要特别的烧写工具ArduinoIDE或者avrdude。avrdude二进制包无法下载,链接无法访问,不过ArduinoIDE可以缓慢下载。后来在github找到avrdude源码,然后下载进行编译。但是这个代码十分恶心,没有一个像样的说明,而且configure也没有,必须使用autotools从头配置。在摸索很久之后(aclocal、autoconf、autoheader、automake)得到可用的configure,进行配置、编译,又遇到yacc没有、生成lexer.c出问题,实在问题太多,加上加班回来连夜搞到凌晨2点,又累又困,决定休息了。

二月25日。早上起来,转变思路,打算找找linux下面有没有别的工具可以烧录Arduino开发板的,于是发现avrdude可以通过apt安装!!!吐血啊。而且ArduinoIDE下载完毕,发现里面有avr编译链和avrdude工具!!!晚上熬夜果然是不好的。泪奔。

本以为搞好了avrdude就能很快烧写代码,结果又是一堆问题折腾了半天。先是调整参数,参数调整好之后,hex死活就是烧不了。串口通信各种问题,出现时间最长的就是device busy问题,查来查去 发现是ubuntu的一个ModemManager工具会反复打开占用串口(CDC类型串口,就是ttyACMn这样的),想要恰当的解决它(不影响本来的功能)还挺麻烦,而这个功能是拿来做GSM什么的,去他妹、删了拉倒!

好不容易解决串口占用了,连上去老是没有响应,报错not responding。但是这是使用ArduinoIDE烧写都没有问题,于是打开IDE详细信息,发现烧录命令跟我用的差不多,但是烧录之前又个reset操作。有可能是程序过了bootloader之后进入主循环就不响应烧录程序了。 反复reset几次,终于成功了。你必须正好在reset之后,同时系统出现了串口,单片机进入主程序之前 这个窗口期运行烧录程序才能写进去。 我只想说:太二了! 回头我一定买一根烧录线,不跟这货斗智斗勇了。要不烧一个dfu的bootloader进去,也比这个好使。(这个是arduino的bootloader) 后来我在烧录脚步里面添加了等待复位并检测设备出现时执行烧录的代码。

将转换器固件刷进去之后,发现一个问题,就是无法在刷新的代码了。作为usb转化器正常工作,reset完全没有影响,也就是不能进入bootloader。极有可能是刷固件之后,arduino的bootloader被破坏了,同时偏上也没有tmk支持的dfu bootloader,最终导致无法刷固件了! 越来越觉得烧录线的重要性了。 好在我手上以后一片Arduino Nano,网上正好有一篇用ArduinoUno给ArduinoUno刷机的文章,于是立马动手,把Arduino自带用例ArduinoISP刷到nano中去,然后接线测试。奇怪的是Arduino的bootloader能刷进去,普通测例却刷不进去(工具总是尝试刷nano)。 不过没关系,通过这个方式已经能把tmk代码刷进去了。于是赶紧把需要的功能在写好,编译,然后刷机。一次成功,直接让我的普通无线键盘也能使用客制化的按键定义了。

一些资料:

简书:Arduino 烧写bootloader https://www.jianshu.com/p/2f274f8b3dab

一些有趣的信息:Arduino各开发板的比较 http://www.arduino.cn/thread-42417-1-1.html

还有Arduino官网,有几个开发板的原理图。