我在做梦 发表于 2017-8-28 10:12:45

orange pi zero玩机

昨天收到的货,昨天在CSDN记录了一下,今天就搬过来咯
玩坏了s2c2440,玩厌了树莓派,最近心血来潮的买了个更迷你的orangepizero,具体计划还没定好
先和当初玩s3c2440一样的方法来了解这款CPU吧
先来个hello word程序~~~(点灯大法)


先晒晒我的板子
http://img.blog.csdn.net/20170827175405576?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

http://img.blog.csdn.net/20170827175418916?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

http://img.blog.csdn.net/20170827175537565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

有新玩具了,还没来得及签收先玩一把


首先我到官网找了找 原理图、Datasheet,原理图找到了,但官方的包里头的datasheet蛋疼的是个h3的,猜测俩个可能兼容吧,先试试,总有种不详的预感。
(原理图,datasheet链接)
咱们有了这俩个资料可以开始点灯大法了(程序中的hello word),主要有以下几个步骤:


1.找到LED灯硬件的原理图
2.找到可编程管脚和对应CPU管脚
3.通过CPU管脚找对应控制器
4.根据控制器的类型在Datasheet里面找到对应的寄存器组
5.读对应的寄存器组 了解配置和使用值
6.进行编程写入寄存器的值
7.进行LED数据寄存器的操作

咱们现在开始找LED咯
如同,在原理图的PDF中找到了俩个LED,一个是PWR也就是电源的,这个无法控制;我们选用status-led,这个是状态LED肯定是可控的啦
http://blog.csdn.net/qq345340585/article/details/77620486http://img.blog.csdn.net/20170827154111888?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

接下来嘛,ctrl+f搜索 status-led
http://img.blog.csdn.net/20170827153814939?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

http://blog.csdn.net/qq345340585/article/details/77620486http://img.blog.csdn.net/20170827153907966?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast



当我看到这个结果的适合瞬间凌乱的想骂人,咋那么不严谨呢,原理图的CPU接口不是说好的PA17吗,这都是什么鬼,又要自己做实验的感脚。
不详的预感实现了,这是给自己挖坑。


找到IO控制器搜索PORT CONTROLLER
http://blog.csdn.net/qq345340585/article/details/77620486http://blog.csdn.net/qq345340585/article/details/77620486http://img.blog.csdn.net/20170827153704430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast


我们先把GPIOA配置寄存器定义出来方便后面用
我们需要以下地址
PA我们用0 则CFG_1地址是0x01C20804
CFG_2地址0x01C20808
数据地址0x01C20810
驱动地址0x01C208140x01C20818上下拉电阻地址0x01C2081C0x01C20820
驱动地址0x01c208140x01c20818

对地址进行如下定义方便调用,将指针定义出来
#define GPIOA_CONFIG1 (*(volatile unsigned long *)0x01C20804)
#define GPIOA_CONFIG2 (*(volatile unsigned long *)0x01C20808)
#define GPIOA_DATA (*(volatile unsigned long *)0x01C20810)
#define GPIOA_DRV0 (*(volatile unsigned long *)0x01C20814)
#define GPIOA_DRV1 (*(volatile unsigned long *)0x01C20818)
#define GPIOA_PUL0 (*(volatile unsigned long *)0x01C2081C)
#define GPIOA_PUL1 (*(volatile unsigned long *)0x01C20820)
//初始化寄存器
GPIOA_PUL0 &=0x0
GPIOA_PUL1 &=0x0
GPIOA_CONFIG1 |=0x77777777
GPIOA_CONFIG2 |=0x77777777

进行下一步吧,去datasheet找对应的控制器的寄存器搜索PA17
PA控制器配置寄存器1
http://blog.csdn.net/qq345340585/article/details/77620486http://img.blog.csdn.net/20170827153534016?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

http://blog.csdn.net/qq345340585/article/details/77620486


PA控制器配置寄存器2


http://blog.csdn.net/qq345340585/article/details/77620486http://blog.csdn.net/qq345340585/article/details/77620486
http://img.blog.csdn.net/20170827153611506?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast



第一下搜索到的是PA17的功能,PA17默认低电平且禁用,我们只需要用output,为了保险PA15也带上一起用,等会再禁用其中一个,但估计应该是PA15控制灯的闪烁,毕竟PA15是个SPI口有进入数据,会闪烁。
开始配置寄存器:
从上图可见,所有寄存器初始值都是0x77777777,即所有IO禁用,可以不理会

第一个配置寄存器地址是0x04,第一个寄存器GPIOA_CONFIG1我们配置28到30位为001,运算如下
GPIOA_CONFIG1&=~(0x3<<28)
第二个是0x08,同上,只不过地址是4到6,寄存器地址是GPIOA_CONFIG2
GPIOA_CONFIG2&=~(0x3<<4)


驱动级别不用管,默认就好
http://img.blog.csdn.net/20170827153414472?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEasthttp://blog.csdn.net/qq345340585/article/details/77620486http://blog.csdn.net/qq345340585/article/details/77620486
为了点灯,先上拉电阻
http://blog.csdn.net/qq345340585/article/details/77620486http://blog.csdn.net/qq345340585/article/details/77620486http://img.blog.csdn.net/20170827153446420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

//0~15 对应 PA0~PA15
GPIOA_PUL0 |= 1<<(2*15)
//0~5 对应 PA16~PA21
GPIOA_PUL1 |= 1<<(2*1)



到此管脚配置搞定,下面就是数据寄存器了,我们控制15和17位的0和1就能控制灯泡的亮灭了,简不简单?兴不兴奋?惊不惊喜?
http://blog.csdn.net/qq345340585/article/details/77620486http://blog.csdn.net/qq345340585/article/details/77620486http://img.blog.csdn.net/20170827153300545?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXEzNDUzNDA1ODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

就像下面这样点灯咯,大家随意玩


//灯亮
GPIOA_DATA &=(1<<15 | 1<<17)

//灯灭
GPIOA_DATA &=(0<<15 | 0<<17)





源码链接,还未测试。。。
链接:http://pan.baidu.com/s/1nveGu0L 密码:jvry



刚刚装好了交叉编译链,因为我的小工控主机是64位系统,为了避免麻烦安装的arm-Linux-gcc-4.4.3
此处略有小坑,运行以下3个命令完美解决
apt-get install lsb-core

apt-get install lib32z1 lib32ncurses5
apt-get install lib32stdc++6



编译链arm-linux-gcc-4.4.3链接
链接:http://pan.baidu.com/s/1slWaYLn 密码:h620





测试电源灯和status灯一个都不亮,不晓得是datasheet的原因还是电源灯直接连IO没连电源还是什么情况,只希望不要RP爆炸买到坏的了,具体原因明天下班回家再调,源码在上面已发了。




PS:在本论坛找到了H2+的datasheet基本可以确定,orangepi的官方文档在扯淡

cdpi5 发表于 2017-8-29 08:54:36

页: [1]
查看完整版本: orange pi zero玩机