本帖最后由 mars4zhu 于 2014-9-14 09:13 编辑
它山之石可以攻玉——读《深入浅出玩转TI Sitara》的启发
| | | TI Sitara、BealgeBone、AM335x、芯片开发板平台、借鉴启发 | | 本文讨论了《深入浅出玩TI Sitara》的一些,并阐述了作者在读后对目前手上一些项目的技术启发, |
Mars4zhu
目 录
插图索引
表格索引
1 概述《深入浅出玩TI Sitara》汇聚了TI原厂的文档、EEworld网友的试用心得,以及一些网友比较特色的项目。特别是本人的一个帖子页有幸进入了该电子书(1.3.12 BeagbleBone 之网页控制 LED 灯,https://bbs.eeworld.com.cn/thread-352593-1-1.html)。高兴之余也将其他网友的分享细细阅读,对比自惭形秽和奋起努力直追之心油然而生。 在通读了该书,并仔细深入了网友的一些心得之后,掩卷沉思,总结了该书对自己有收获的一些要点,并分享受到的对目前手头上一些项目启发点。
2 《深入浅出玩TI Sitara》主体内容《深入浅出玩TI Sitara》共分三个部分,主体结构如下: 第一章 基础篇(主要介绍了BBB的软硬件、开发工具与环境,基础性实验如GPIO、ADC的试用,以及网友的一些使用心得) |-----------------BB-Black 开发环境的搭建 |----------------- BeagleBone Black之基础实验篇(GPIO、DAC、I2C、SPI,外部设备如LCD、EEPROM、DS18B20、以及linux系统的使用如网络、VNC等,其中隆重推荐本人的1.3.12 BeagbleBone之网页控制LED灯) |-----------------BB-Black相关性能测评(IO、内存、网络性能的评测) 第二章 官方课程(主要介绍了TI官网的教程) |----------------- TI Sitara AM335x系列概述(资源、架构、文件系统、硬件系统等) |----------------- uboot、启动方式优化 |----------------- 调试方式(CCS调试linux、IAR+JLink调试AM335x) |----------------- 应用案例(工业自动化、LED-WALL、HMI、CAN+EtherCAT) 第三章 EEworld论坛网友实战篇(主要汇聚了eeworld网友一些比较有趣、成功的使用BBB开发的项目)。
3 阅读收获与启发点
3.1. Linux系统与外设驱动Sitara属于较为高端的MPU或AP,主频高、内存容量大、结构复杂,能够运行linux等操作系统,因此,该芯片对内部集成的外设,采取了linux系统的设备树(Device Tree)驱动的方式,而完全不是平常做嵌入式开发的单片机直接读写寄存器的控制方式。 表 31 Ti Sitara的linux外设驱动使用心得 | | | | 1.3.1 BeagleBone Black GPIO的相关操作 | LEDHandle = fopen("/sys/class/gpio/export" fwrite(&setValue, sizeof(char), sizeof(setValue) - 1 , LEDHandle) | | 1.3.2 BeagleBone Black的ADC 的使用 | fd = fopen("/sys/bus/iio/devices/iio:device0/in_voltage3_raw") read(fd,ch,4); | | | |
可见,当具有高级操作系统(High Level OS, HLOS)时,对外设的管理就有了一定的规范化和标准化,对数据结构、调用接口都有了要求,必须符合了这个要求,才能满足linux系统的设备管理。 联想到我们常用的MCU控制外设的方式,基本都是直接读取寄存器控制,或中断相应,这样做的好处是直接面向硬件,获得最高的效率、灵活性和最快的速度,然而,这样导致做成的项目代码绑定在了硬件上。当换一种硬件,则必须重新开发软件。因此,HLOS的硬件抽象化,结构和API标准化仅仅是牺牲了一部分效率和灵活性,获得了不依赖硬件的独立软件体系。 联想到目前的MCU也逐步进入了硬件抽象层,软件API标准化的趋势,比如ARM公司提出的CMSIS标准,统一了ARM架构的软件接口标准。各个芯片公司也推出自家芯片的标准库函数,同时第三方软件公司也开发标准库,最著名的则是arduino,标准化硬件接口和软件API,已经成为了一个准嵌入式行业标准。 表 32 目前MCU平台的软件标准化(库函数) 同时MCU的开发板硬件接口、布局和功能也开始从五花八门走向标准化统一化。 表 33 目前MCU平台的硬件标准化
3.2. PRU与自定义外围器件的控制通讯协议刚开始了解PRU,还不是特别清楚PRU的作用,以为是一个协处理器,经过阅读《深入浅出玩TI Sitara》,才明白PRU的强大功能所在。首先复制一段介绍: “AM335x 内部还包含了一个叫做 PRU 的系统,PRU 可以理解为一个内置的 MCU 或者 FPGA,用户可以在这个 PRU 里面去做一些自己的定制性开发(TI 为了方便应用开发,现已在 PRU 里提供了串口驱动 )。比如,该芯片目前只支持 6 个串口,通过PRU 可以再扩出 4 个串口,那么,AM335x 整体来说,就相当于已经支持了10 个串口。同时 AM335x 还支持一些外部的工业总线,如 EtherCAT 和 PROFIBUS 等,这些总线的协议站都是在 PRU 系统里实现的。”【1】 如果没有深入理解这段介绍,那么《深入浅出玩TI Sitara》书中的“3.1 家居生活管理中心”给出了一个最好的解释。 该项目通过在linux系统中使用C语言或者php,与PRU子系统进行通讯,php负责传递数据到PRU子系统,而PRU子系统则负责将该数据按照红外遥控协议(遥控代码、38K载波调制),输出到引脚的红外发光管,最终实现了红外遥控功能。 “是要实现利用这代码来控制实现红外线遥控器波形,想用 pruss 控制波形,第一件麻烦事就是要发送的数据由 C 语言程序传递到 pru 程序。其实 pru 使用的空间(无论数据还是代码),都存在在我们的 flat 内存空间上。所以只要找对地方,把数据写入。控制红外线的时序,交给 pru 就可以,没必要再加一个内核驱动了。接下来,应用程序从 php 获取数据,然后传递给 pru,再让 pru 执行生成红外线时序的代码。” 该项目间接地说,就是PRU子系统负责红外遥控波形的生成(包括遥控代码数据调制、时序、载波生成等),然后用户程序只需要将遥控代码数据传递给PRU子系统,其余的则CPU不需要考虑。 联想到我开发的一个项目,需要控制多彩LED灯带。目前流行的LED灯带采用两线制、单线制等控制协议,某LED灯带的控制协议如下:
图 31 某LED灯带控制协议 在没有采用外部CPLD或者专用MCU之前,花费了大量的时间用MCU控制GPIO引脚生成控制波形,导致复杂度大大增加,而且对MCU剩余的处理能力造成影响。 如果采用AM335x作为LED灯带控制,则不需要外部的CPLD或者专用MCU,同时可利用AM335x的丰富强大的多媒体图像、文件存储功能实现更好的显示效果图。
4 总结本文对《深入浅出玩TI Sitara》阅读后的思考和启发点进行了简要记录,总结了电子书的主体结构,重点讲述了阅读后的启发借鉴意义。即:对linux设备树统一外设驱动标准引起对嵌入式系统、MCU的软件/库函数、硬件布局/接口的标准化思考。PRU子系统的自定义外部器件协议的功能。 他山之石可以攻玉,触类旁通,确实从该书本中学会了很多东西。
版本历史(Revision History)
|