又到点灯的环节了,之前不管是3288还是3399的开发板,都是从点灯开始入门的,既然Station M2也是个开发板,同样可以点灯。按照Firefly的一贯作风,开发板上都会留又两个LED,一个被用作工作指示灯,另一个可以由用户自行控制,咱们来看看StationM2是不是也是这样。打开原理图,找到CPU管脚部分:
pYYBAGHXyR-AXBEuAADS2LtLxiA090.png

    果然被我猜中了,一个是Work的,一个是Diy的。瞟了一眼旁边的IO口定义,名字叫GPIO0_D3_d和GPIO0_D4_d,多了个_d。再看看其他的也都是类似这样的命名,说明这两个口都是下拉的,不用看电路就知道是怎么实现的,看来Firefly的小伙伴们又进化了,处处都为使用者节省时间,降低使用难度。
    继续往下翻,来到LED电路部分:

poYBAGHXyTOAFZPPAAFzGC7wTZE793.png
    看来又被我猜中了,一个共阳极的发光二极管,绿色的是WORK,红色的是DIY。等等,我记得板子上的灯上电是蓝色的不是绿色的,看来StationM2有过版本变化,至少进料不一样了。没有关系,这个无伤大雅,不影响使用。两个灯都是给低电平亮,高电平灭,这个先确定了。

    原来在3288和3399开发板上电灯,我用的是golang语言采用UIO的方式来实现,也就是和普通的MCU方法一样,直接对寄存器进行操作。一般这种大ARM都带有MMU,寄存器实际的物理地址和操作系统中的地址是不一样的,所以首先要把物理地址映射到操作系统中的内存地址上。Linux下常用的方法是mmap,指定页的大小(一般是4K)再加上寄存器的偏移量就可以进行读写了,我估计3566也是同样的道理。


    下一步就该看开发手册了。3288和3399的每个管脚都有许多不同的功能,需要提前配置一下,是通过IOMUX来实现的。3566是不是也是这样?打开手册,我的天呐,多出来这么多的东西,手册大小就有80多M,给我吓倒了。大概看了几眼手册,实在是没有信心看下去了,如果真是从头写不知道要猴年马月了。本着困难留给别人自己来享受的原则,还是用操作系统提供的接口来操作吧,这些困难Firefly已经替我承担了。


    使用操作系统就简单多了,首先进入/sys/class/leds目录,一下就看到了firefly:blue:power和firefly:yellow:user两个目录,肯定就是这两个灯了。不过呢名字还是变了,power就是work,user就是diy,同理blue对应G,而yellow对应R。来验证一下我猜的对不对,分别键入命令
    echo '1' > firefly:blue:power/brightness
    echo '0' > firefly:blue:power/brightness


应该可以开关蓝灯,是不是这样?

poYBAGHXyVCABSbCAAAsBClK1Jg946.jpg
pYYBAGHXyViAamOeAAAqnOSfhsI051.jpg
   

    没错,功能正常,那么另外一个灯也可以控制了
    echo '1' > firefly:yellow:user/brightness

poYBAGHXyfaANdi4AAAq7P3WAww114.jpg
   

    原来这个灯真的是红色的而不是黄色的。

    这样就完了嘛?是的,确实操作就算完成了,但是没有什么意义,干脆我就把这个红灯利用起来,做成Ubuntu的硬盘指示灯吧。
    一样很简单,一条命令:
    echo 'mmc1' > firefly:yellow:user/trigger

poYBAGHXyg2AaySdAAAm5eqYt5g055.jpg
pYYBAGHXyhiAEIGKAACipmOHtJs049.jpg
   

   只要有文件读写的情况,红灯就会闪烁,和PC的硬盘灯是一样一样的,效果就不拍照了,想看的话看看自己的机箱就知道了。如果不想每次开机都要手动执行一遍,那就把这条命令放入.profile文件中,别忘了用管理员权限修改。

    灯确实是亮了,但不是我用程序控制的,所以叫“伪”点灯。而且看手册的描述,GPIO0这个端口不仅仅是CPU来控制,用PMU也能控制。一般情况下CPU是唤醒状态可以操作,而休眠后就不行了,但是可以把CPU的控制权转交给PMU,这样可以不通过CPU而是直接使用PMU就能在休眠状态下控制GPIO0的各个口了,不知道我理解的对不对,还望指教。