嵌入式开发一个月随笔

嵌入式开发一个月随笔

从事嵌入式开发已经有一月有余,平心而论,我还是比较喜欢嵌入式开发的,不仅因为其涉及面广可以学习到很多知识,而且嵌入式开发对动手能力要求比较高,让我不觉得无聊。

工作以来了解了嵌入式开发的相关流程,也实际动手做了几个需求。过程中遇到了很多问题也解决了很多问题,下面一一道来。

调试,纯软件开发的调试可能没那么麻烦,IDE都会集成好调试工具,就算不使用IDE,也可以单独使用调试工具进行调试,像gdb之类的。这些调试工具可以进行断点设定、单步调试、多步调试、监视内存值等等十分有用的调试手段。但是呢,到了嵌入式板级调试,现在我们就主要使用的串口打印的方法进行调试,调试起来十分麻烦,想多测几个值就必须多写几句打印语句,用起来十分繁琐(当然嵌入式板级调试也有方法可以实现高效的调试手段,比如ARM提供的调试器,JTAG等,但是我对这些都不了解,以后提升开发效率可以从这些地方入手)。

TW8836无RGB信号时的白画面问题,这是我接手的第一个问题,由于该项目换了显示器,现在显示器默认状态是背光高亮,这样人们就会看到白屏。在ACPH17中开机时,屏幕会有0.2s左右的白屏,导致用户看到的画面会有闪屏现象。一开始我是真的毫无头绪,后来知道了串口打印,就跟着开机流程中调用TW8836的函数一步步打印提示信息,这样大概熟悉了开机流程后,又跟着流程看代码,很多知识都不知道,所以是有点迷茫,好在最后在代码注释中发现了重要信息,一个过程会把TW8836设置为高阻态,同时关闭显示信号,所以此时屏幕接收不到信号,就以默认的情况显示,在此处增加了关闭背光的代码后,开机过程中就不会出现白屏现象,但是屏幕背光也一直处于关闭状态,因此还要添加背光打开的代码。在背光关闭后立刻打开背光是不行的,需要等到其他地方给8836输入信号,并且修改其高阻态后再打开背光,但是我并不知道具体打开的地方,因此在关闭背光后我增加了一个延时的过程,经过调试,发现延时100ms后屏幕不仅不会出现白闪,同时背光也能被打开,开机一切正常。

ILLUMINATION电压值读取,通过处理器的引脚输入一个电压值,然后PC端下命令给处理器,处理器返回输入的电压值。这个需求还是比较好写的,只需要读取到ADC芯片中的寄存器得值,然后通过公式(电压值=参考电压的值/ADC分辨率*ADC寄存器的值)。

FAN PWM读取,PC下命令后,返回duty cycle和frequence一开始是读取风扇的配置,然后返回数据。后来要求频率能够接受到外部输入,最先想到的是PWM输入模式,但是FAN PWM输入的引脚并没有PWM INPUT功能。最后通过求助,实现通过输入引脚的外部中断检测下降沿的次数,然后开一个一秒钟的任务来计算频率。PWM就是脉冲宽度调制,两个主要的参数是频率和占空比,频率是一秒钟信号的次数,占空比是每个信号中高电平所占的比例。通过高低电平有规律的交错就可以达到控制风扇速度的目的。

现在我正在做的是使用TW8836的dongle来将图片资源刷入到SPI Flash中。可是使用dongle时却遇到了问题,一开始dongle能够正常连接,第二天开始就一直报找不到设备,询问了很多人也没找到原因,甚至换机台,换电脑都不行。我怀疑是芯片在我热拔插过程中烧坏了。目前正在等台湾公司给我寄新的板子。嵌入式出问题的原因也可能很多,最不好定位了,但是在反复验证过程中却可以不断练习自己的动手能力。问题原因可能要后续给出了。

今天修改了风扇的pwm值,但是发给Sven后,他那边一直不能测到波形,但是我这边一直能测到,Sven使用的下载方法和测量方法与我一致。最后反复思考,他应该是没有插上风扇。实测插上风扇才有波形。