2018键盘映射器(二)
2018年3月 键盘映射器
2018年三月1日。 前两天把基于arduino leonardo 板子加usb host shield的环境搞稳定之后,修改过几次键盘映射。昨天小板子(ProMicro+miniUSBShield)到了,于是开始准备第二版更小的映射器。
昨天吧电路构思完毕,将发光二极管和电阻焊好了,还差开关、电容等把复位电路也补上。今天(3月1日)准备把bootloader弄好。ProMicro小板自带的是Arduino的bootloader,会给后续的刷新固件带来麻烦,所以要先搞定它。
这里查阅了DFU Bootloader的一些资料,决定使用LUFA的boot代码,原因是gh60(TMK)代码里面提到很多次,而且就在TMK代码中还找到了全套lufa的源码。大概捋了捋makefile,决定开始动手。
先复制了一份BootLoaders/DFU下面的makefile,把MCU和F_CPU(频率)改了,编译完成。使用avrdude工具进行烧录的时候始终报错。警告是使用了intel hex,查看avrdude手册发现需要加上i指定格式。然后就是flash地址越界。发现mcu改了,flash大小依然按照at90usb128配置的。于是修改flash大小,按照tmk里面bootloader代码中注释说明的指定bootloader size为4K,然后顺利完成编译、烧录。接到电脑上通过lsusb命令正常看到DFU bootloader设备。大功告成!
下一步是刷入映射器固件,在面包板上测试,然后等开关到了再进行组装焊接。
三月4号。去唐山两天回来,开始在面包板上测试。由于找不到usb-host-shield的原理图,只能猜测接线。而且坑爹的是mini usb-host-shield电路板上印刷的接口标记还是错的,接好了键盘死活没有响应,还好参考相同板型的其他产品时发现定义不一样,就按照其他产品的定义接线,然后键盘就正常响应了。然后其他的问题就是默认进入了bootloader而不是转换器的固件代码,而且复位也无用,依然进入bootloader。参考手册说明,发现是hfuse 的BOOTRST位设置问题,于是使用avrdude命令进行修改(默认用户代码启动),就正常了。 最后在焊接链接板时出现了败笔,502不小心渗透出去,把旁边的孔堵死了,看来是报废了。等工具到了再做一个吧。
三月5-7日。重新焊了一块板子,正常工作,(橙色 蓝色)LED测试没有问题,橙色用作CapsLock,蓝色计划用于SpaceFn。但是遇到boot问题,dfu bootloader永远起不来。查阅boot资料,配置HWBE BOOTRST之后还是不行,查阅源代码也没有头绪,APP代码里面查不到reset之后跳到BOOT的部分,LUFA里面查不到正常跳到APP的代码。后面终于发现,通过avrdude命令刷固件的时候,会把整个flash 擦除一遍,包括bootloader也被干掉了。于是再通过avrdude一次刷入转换器和bootloader的代码,一切就正常了(通电之后进入app,按下reset就进入bootloader)。(HWBE=0,BOOTRST=1)
一些资料:
百度百科:hex文件格式 https://baike.baidu.com/item/hex文件格式/1025048?fr=aladdin
google ‘avr boot sequence’ 好像是这个,在公司看到的一个文档。