bf531/3 开发若干记录

bf531/3是我职业生涯碰到的第一个片子。当时我没嵌入式开发经验,从零开始,慢慢的熟悉直到解决了很多fae都搞不定的问题,呵呵,小小的成就感。

当时玩这个的时候是首先去了adsp的技术社区,从时钟设置到内存分类,到flash读写,启动,搞通以后立马就不怵这个片子了,因为最小系统能跑起来了嘛。adsp的技术社区后来停止运转了,直接转到另一个什么地方去了,名字不记得,好像在中国也有某个技术社区。

关于一些基本的东西,如gpio,ebiu,ppi, sdio,pll之类的各个寄存器位的含义以及操作,就没必要说了。reference 的pdf里都有描述,而且,感觉它的EE Note(或者app note?)都挺全的,再加上好多各种example project,只要搞定一个基本的系统,其他方面也就是加上各种模块而已。vdsp开发环境当时我是从3.5版本用到5.0版本,然后就与其拜拜了。

说一下我觉得算是经验的东西:

(1)531似乎真的是533的部分缺陷版。后来做ti的芯片时,有同事说ti的做法是一个系列的片子在成型时进行内存测试,ok的是一个型号,不ok的则进行内存管理,芯片内存少一点,其型号比ok的低上几位。这个531好像也差不多,533的最高主频600MHz,531的为400MHz;另外531的内存比533也少大概一半??记不清了。反正后来把531替换成533系统更稳定了。另外,531我试着进行了超频,通过pll寄存器很容易改变其主频设置,我试着把主频调到最高504Mhz,半点问题都没有,不过记得将sys clock分频到sdram能接受的频率,太高了sdram跑不动的。

(2)ebiu对应于TI c6x系列的EMIF接口,外部总线接口单元。ebiu用来接sdram,以及两个531系列的对接,形成双核。接口设置比较简单,因为ebiu对sdram的接口很完善,按照文档的参数进行对应register的设置彻底没问题。sdram可以分成bank,当时以为只是为了方便管理,后来才知道,更重要的作用其实应该是省电,不用的bank可以暂时把他poweroff。

(3)DMA对于大量数据传输很重要。我们通过ppi进行视频流的传输,玩的就是通过ppi将数据DMA到sdram,然后进行其他操作。dma,就是内核放弃总线控制权,由数据传输的双方进行直接通信。就是说,如果不用dma, 则数据的流向如此: ppi input --> core--> ebiu--> sdram;如果用了dma,则流向如下:ppi input---> sdram,大概如此吧,太久了。当时研究了一下访问不同级别ram的速度,发现访问片上ram的时间是按照core clock cycle来算的,即400mhz的速度,只要数个cycle就搞定;而访问ebiu上的sdram的话,起码要10个以上的sys clock,sysclock为133Mhz,这是sdram运行的标准频率,二者相差甚远。当时的项目是每秒2M 字节的速度,时间很重要。dma的时候,内核不过问数据传输,被解放出来,还能做其他的事情(虽然不能和dma双方的总线,source,destination等资源有访问冲突)。

(4)ppi传输data stream会时断时续。这是一个让老子咬牙切齿的问题,当时恨不得扒开它的皮去看看发生了什么事,而且当时在某个群里有个牛人说他用了很多个bf系列的片子,ppi在传输较少量的数据时没问题,但是一传输大量的视频数据流时都有卡顿。当时的现象是,传输60帧/s的压缩数据时,一分钟总是少那么十几帧;传输断点开始的那帧数据回放时总是不能正确显示,搞得人火起。当时经理叫了fae,可是人家咋都不知道怎么玩,尝试很多方法都白瞎,搞得经理发火跟人大吵。。。某一天,万籁俱静,我一个人孤苦伶仃地继续折腾,不小心打开了某个定时器,录数据想看看每一帧的时间,然后---------TMD一帧都没丢!!数据没有丢帧,没有被污染,所有数据都是完整的。我呆了很久,才确定,我似乎搞定了,后来发现确实搞定了。曾经小家子气的敝帚自珍了很久,现在可以说了:ppi的帧同步和场同步信号pin和某个timer的什么pin是复用的,本来二者不相关才对,可是不知道片子吃错什么药了,相互影响。我打开了这个定时器,和ppi的设置同时生效,于是就没问题了。具体咋做就不太清楚了,思路就是这样。不知道现在的531/3系列还有没有这样的问题呢?

(5)关于boot。我搞过spiflash和并口flash两种启动,都不难,啃app note就ok了。刚开始的时候,就是先做这个,作为初学者摸了好久才知道,烧写flash要首先写flash烧写程序,用其他片子好像没这个搞法,虽然明白了就不难,但是初学时可是一座大山啊。启动代码的init,如果要把程序load到sdram,首先也要初始化ebiu。还有一个, double boot,即一个片子根据gpio的不同的电平选择启动不同的dxe,也是比较简单的,需要在init里判断gpio的电平,把不同的dxe的起始地址(或者序号?脑子不行。。)设置成目标地址即可,具体也有一个 app note说明这个问题。

就这么多了,其他似乎没有什么是hwrm里没有说的了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值