电子价签墨水屏折腾记

先放上源码https://github.com/muyuchl/epaper_price_tag_mod
由于是东拼西凑的,请不要要求太多。

 

一切要从某鱼说起。平时会在某鱼搜索开发板之类的,突然有一天被推荐了电子价签这东西。
看着价格也不贵,10元以内就有墨水屏,电池,光拆下来就值这钱了。于是上网搜资料,
结果只有在某莫论坛上有看到。点注册,居然要八十大洋!还好能下载到帖子里发的附件。看
着挺好玩的,一时冲动就买了10个红黑屏的来玩。为什么买这么多?因为10个包邮。

一开始没仔细看,原来红黑屏用的是CC2640单片机,而黑白屏使用的是MSP430,430的
能下到测试代码。只好重新买了黑白屏的,看原论坛里说的5元就买到,现在涨价了。还得要
下载器,于是搞了块二手的430 launchpad。

到手后,编译,下载测试程序,屏上出现了图片,比较顺利。墨水屏拿掉电池还能保持显示很多天(
据说有半年)。想起10年花大钱买了9.8寸Kindle后开箱时第一次看到时的情景,和纸真的很像。


废话少说,开始学习。虽然读书时就久仰MSP430大名,却无缘(钱)接触到,今天终于可以玩一玩了。
找文章看,找电子书看,结果发现还没有某个网页教程实用(https://www.embeddedrelated.com/showarticle/179.php)。
有51单片机基础的理解起来还是容易的。

电子价签里用的是A7106这个2.4G无线芯片,如果用无线来更新图像比编译下载会方便多了。结果这个资料比较难找,官方网站上居然有没下载,只写着请联系销售人员。
怪不得知名度和nrf2401没法比。在某鱼上只看到一两个卖家在卖模块,10元一个,比价签都贵了。又看到有人在问A7106和
A7105的区别。我简单比较了A7105和A7106的区别,发现A7106就是多了个寄存器,猜测程序应该兼容(后来也证实基本兼容)。
上网搜A7105,这个卖家就多了很多,发现很多是当做遥控器的。下单买了5个拆机模块(为了包邮,唉,省钱小王子),再说了,
以后给女儿改玩具遥控或许用得上(之前买了好多个nrf模块也是这样想的,结果测了一下通信就放一边了)。

拆机模块到手后,发现排针是剪脚的,间距也不是常见的2.54,GIO2也没有引出。用电烙铁拆了一上午才拆掉两个,再焊上线。

手头刚好有两块stm32f103 (老外起了个外号Blue pill,万能的某宝少于10元就能买到),就想着先在STM32上调通无线通信。理想总是美好的,搞了一下午,结果连个SPI都没通信成功,读回的要么全0,
要么全1。附上网上的打滑诗一首:锄禾日当午,不如码农苦,桌前调代码,一调一下午。不知道原因了,可能拆管脚时烫坏了,
可能自己没焊好。

放弃拆机A7105,从某宝下单新的A7105模块。

重新学习了A7105的参考代码,然后移植到STM32上,跳频什么的听上去太高级,我就偷懒固定一个频率。这次调试用上了20几元买的逻辑分析仪,杜邦线接线看上去太乱了,好在出来的波形正常,可以顺利读到写入的ID。证明SPI通信没问题!接下来开始调两个STM32无线通信,经过辛酸的不停尝试,终于实现一收一发。

两个STM32无线通信正常后,我又用STM32和Launchpad上的MSP430进行无线通信,又是一番折腾。然后把launchpad上的代码移植到价签上,这回比较顺利,说明A7105和A7106基本兼容。为什么要加个“基本”,因为我也不知道哪些有不同的,能用就行了。

MSP430的RAM太少了,所以得把无线传来的图片先放到SPI FLASH里去,再加载到屏幕。以前看嵌入式的书,对SPI Flash看上去都挺简单。这次得真干了,屏内的芯片是25vq21b,什么,居然搜不到数据手机?在下载了几个其它厂家的手册后,
才知道这些芯片大部分都一样的命令。我又在某宝上下单一个winbond的同样类型芯片,也想先在stm32上调通再移到430上,因为直接使用屏内调试没串口不方便。芯片
到手后直接使用STM32CubeIDE的SPI配置,顺利读到JedecID。后面读取写入也没有费很大周折。然后移植到430时失败了,好挫折。我对比了逻辑分析仪上的波形,实在看不出来和stm32出来的区别在哪里。逻辑分析仪解析出来的发送命令也是对的,FLASH就是没有回复正确。失败了多次后在网上继续搜。不能直接复制,就对着抄。终于抄到一个可以正确读取Jedec ID的。网上的IO模拟SPI代码也是五花八门,我自己也搞不清了。所以至今也不明白我自己移植的错在哪里。

墨水屏,无线通信,FLASH看上去都搞定了,可以开始整合了。我使用如下图方案:
PC机运行上位机,使用串口和STM32通信
STM32使用A7105和价签的A7106通信
MSP430从A7106获取并执行命令。


我也想过其它方案,如:
不使用STM32,直接拿一个价签实现。问题是价签没有直接可用的串口。
理论上可以使用背面的IO模拟,虽然TI有application note,但看上去还是麻烦

 

先写个程序把Flash前4KB读回到电脑上,解决一些BUG后得到了如下的图。

左右是镜像的了,不过还算有规律。这是解码数据造成的,解码是针对最原始demo程序带的图像数据做的。因为我发现直接按
从左到右,从上到下显示那个图像,出来的结果是上下和左右都是翻转的,所以在显示到界面前自己先翻转一下。其实问题不大,
在传给墨水屏前自己先翻转成所需要的就行了。虽然我查了数据手册和程序的初始化命令,看上去没问题啊,X增加,Y增加,
但是结果就是这样,不明白。

继续实现了一些小功能:把数据传到Flash,从Flash加载图片数据。目前存在的问题是时间长一点价签就没反应,由于价签没串
口,也不知道是程序跑飞了,还是无线模块出问题。测试程序的墨水屏使用延时,而不是读管脚来判断墨水屏是否忙。按照网友逆向
出来的墨水屏电源控制,开关并不起作用,具体点就是关墨水屏,然后执行刷新命令,屏幕还是会刷新。

其实做的过程中,我比较想实现的是把它当成一个名言警句显示器,FLASH可以存放64张图,每天自己更换。

 

一点感想
自己不搞嵌入式多年了,现在只是作为爱好,稍微玩玩。搞嵌入式赚钱不多,请不要拿个例来反驳。要学习的
东西可以说多(各种芯片,模块),也可以说少(常用协议其实不多)。现在STM32Cube把一些通用的提取出来,
在界面上直接配置好就生成代码了,这个非常方便,让人把心思放在业务上。调试是个麻烦事,有时是硬件问题,
有时是接触不良,有时是自己犯的低级错误(比如线拔了忘记插回去)。

就这样吧,顺便感谢一下某莫的网友们。

 

后记

每日更新图片功能完成

在添加了超时重传后,传输基本上都成功了,如果还是不行可以增加重传次数或放到铁盒子里。

MSP430代码逻辑改成了如下:

开机时无线打开 ,调试用,如果下载FLASH数据建议不要用电池供电。X (比如3)分钟没无线数据则关闭无线,省点电。

1分钟定时器醒一次,如果累积24小时了,切换图片,否则休眠LPM3。

我测了一下电量,13天前3.07V,现在2.97V,看来还是挺耗电啊,估计再过一段时间就会停了,暂时不知道怎么优化了,可以某些IO脚应该关起来。

posted @ 2020-07-20 14:47  myfish3  阅读(11429)  评论(15编辑  收藏  举报