261_S32K144_串口驱动

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

    继续学习S32K144,前面分析过一次机遇UART的printf。今天从驱动以及原理层面了解一下这背后的机理。

    首先值得一说的是,虽然我们在电脑上通过串口工具查看到了串口的信号,但是本质上来说这是串口转成了USB的信号。在之前接触Arduino的时候,有一个完成相关功能的小芯片CH340。但是,我们这个开发板实现这样的功能直接是走了一个MICRO USB的接口。这个功能是如何实现的呢?

    关于这个功能,顺着原理图做一个逆向的寻找。

261_S32K144_串口驱动_第1张图片

    这是MICRO USB的部分,这部分在这个开发板上最重要的功能或许应该是OpenSDA调试器功能而不是打印功能。不过,既然串口信息走的这个数据口那么这个串口来源应该往前找。从上面的信息看,其实这部分是通过USB的模式进入了后面的芯片。

261_S32K144_串口驱动_第2张图片

    后面的这个芯片是一个MCU,也是32位的ARM处理器,性能还不错。MCU相应的资料我在文章连接中整理放上了。看上去,这个MCU比较好的一点恰好是能够提供串口自己USB的接口两种方式,通过这个做了一个转换。同时,这个MCU负责实现SDA的功能。看起来,这很大程度上是一个独立的工作单元。而后期有时间的话,也可以研究下这个芯片以及相应的调试技术。在这个芯片中,固化的软件应该实现了一个串口到USB的透传功能。

261_S32K144_串口驱动_第3张图片

    不看细节,看大的方向的话,再往后这个串口信号就直接进了S32K144 MCU的UART端口了。

    接下来,直接做个串口驱动的测试。

261_S32K144_串口驱动_第4张图片

    这是串口用到的MCU的资源。

261_S32K144_串口驱动_第5张图片

    进行管脚的属性配置。

261_S32K144_串口驱动_第6张图片

    做一下驱动属性的配置。之后,生成代码,然后增加相应的初始化以及测试代码如下:

261_S32K144_串口驱动_第7张图片

    首先,对MCU UART的管脚进行了初始化配置。接着,初始化了串口驱动。之后,修改了串口收发的中断优先级,这是为了避免与FreeRTOS有冲突。

261_S32K144_串口驱动_第8张图片

    这个是测试代码,软件编译成功烧写后运行,在串口监控工具中可以看到如下的效果:

261_S32K144_串口驱动_第9张图片

    其实,这里的时间戳在一定程度上能够看得出来任务调度的一个准确性。其实,这就是pritnf的一个雏形了,如果是用到了printf,增加的应该也只是一个数据格式转换的过程。后续,或许我还会尝试实现一个printf的函数。

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

你可能感兴趣的:(S32K,嵌入式)