ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:432.29KB ,
资源ID:10643201      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10643201.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(说说K60的FlexBus外扩SRAM接口电路.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

说说K60的FlexBus外扩SRAM接口电路.docx

1、说说K60的FlexBus外扩SRAM接口电路 最近一直在画Kinetis和FPGA的板子(所以真是忙得都没时间更新博客了,呵呵),对Kinetis的硬件电路设计上有点心得,所以为了怕自己以后 忘记了同时也为了继续俺的开源计划,所以这里就开始先挑出一个来说说,当然没想过能做出多大贡献,只是希望能给准备开始着手设计电路的网友一点借鉴,进而 能少走一些弯路(自己在摸索设计的时候就走了很多弯路),所以前车之鉴这里就晒给大家了,覆辙之路还是不走为好,哈哈 本篇就先说说Kinetis的SRAM接口电路(放心,以后还有其他的,敬请期待,呵呵),可能会有人提出来128k还不够吗,嵌个操作系统都足以了,其 中

2、原因一是自己可能会用到,二是即使用不到,咱玩玩不好吗,哈哈,飞思卡尔都给出接口了,咱不用白不用,俺就是这个原则,只是可惜手里的这个K60没有 DRAM接口(K60有些系列还是有的,还有NAND Flash控制器的),有的话也会加上玩一玩的,哈哈,不要扔砖啊。下面进入正题: 首先还是先介绍下FlexBus的特点,至于什么是FlexBus,其实就是飞思卡尔家的一种灵活的外部总线接口,可以用来扩展例如像外部ROM,SRAM,可编程逻辑器件或者一些从设备之类的,下面是一些特点:(1)六个独立的可编程片选端口,nFB_CS5:0(加n是因为打不出来横杠,呵呵,只能用n表示低电平片选了);(2)8位,16

3、位,32位可配置端口,包括数据和地址;(3)数据传送可编程为8位,16位,32位,根据相应的外部设备数据端口的位数决定(8,16or32);(4)内部软件可编程的总线冲突机制;. 特点列出来的不是很全,知道部分即可,因为等真正软件编程的时候自然会用到。当然想要设计SRAM接口,光知道特点可不行,还需要它的操作模式,因为这涉 及到地址总线和数据总线的复用的问题,有些系列pin多的话可以不用考虑复用问题,当然如果为了布线简单化还是建议复用的好,不过遇到复用就会问题多多, 这也是我想要分享的一个经验,在复用问题上要多加注意,因为其地址总线一般为固定的32位地址,而其数据总线根据外部设备可配置为8bi

4、t,16bit或 者32bit,而且在复用的情况下数据的对齐方式也可以配置,例如左对齐data8:0则对应FB_AD31:24,右对齐则对应为 FB7:0,这里建议用默认的左对齐方式,因为这就可以不用考虑地址锁存的问题,这个问题曾经困扰了我很长时间,这里几句话解释不清楚,等下次准备从 零入手系列的FlexBus模块软件篇里会详细的说一下,下面就上图了,哈哈 下图1为飞思卡尔Tower系统的SRAM接口图,用的是飞思卡尔自家的256k*16bit的异步SRAM,即MR2A16A。注意其中 FB_AD0_B为FB_AD0的倒相,其实可以用常见的6倒相器逻辑门芯片74LS04即可,不过因为只用到一个

5、倒相,有些浪费资源了,官方给出的是单 倒相74LVC1G04,这样即省体积又省成本,不过我为了简化还有就是省钱了(俗了点,哈哈)就只用了个三极管简单搭了一个倒相器,见图2. 下图2为自己画的SRAM接口电路,这里我没用飞思卡尔的RAM,而是换了常见的三星的1M*16bitRAM,即IS61WV102416,毕竟这个市 场上比较容易买得到,而且工程应用的较多,出货比较稳定,所以价格较便宜,哎,真是逼的,穷学生没有钱啊,呵呵本来想随便说说,结果还是说了这么多,估计大多数人会直接看图了,哈哈,不过还是建议看一下正题内容部分(前两段就当自己唠家常了,呵呵),有些东西还是 需要注意的。还有就是本篇只是说

6、说硬件接口电路部分,软件篇还会写在从零入手系列里的,到时候会仔细说说寄存器的使用方法和一些重要的注意事项,希望能有 所帮助,好了,老话,未完待续呼. .终于腾出时间更新下博客了,真是好些日子没写了,终于又回归了。期间几个网友都在问我什么时候更新,哎,有点惭愧,直到今天才更新出来,这几天爆发 一下,补补更,嘿嘿(小说体的感觉又来了,有木有)。这些天感觉还没到盛夏,天气就热的发闷,别的地儿不知道,济南是热成火炉似的了,所以冬暖夏凉的实验 室是个好去处,所以说主观上我是不想宅的,但是客观因素让我不得不宅在实验室了,呵呵,那就捋胳膊抹袖子开始整吧(咳咳,喝口水先) 从零系列的第十一篇(呵呵,不经意间已

7、经写了十篇了)FlexBus应用, 在上一系列就已经预报了,结果拖到现在,让一些等着的博友等了这么久,惭愧惭愧,以后应承下来的就尽量早点搞完,越拖越写不动,真的体会到这种感觉。其实 前一周一边在准备众星捧月的比赛,一边在写Kinetis的USB底层驱动,一直到前天才开始准备写该篇了,本来是想着趁热打铁的把USB模块介绍出来 的,不过还是决定先把这篇补上再说,后续篇章会写出来Kinetis的USB模块(由于USB内容较庞大,我整整搞了一周,所以打算分成几篇写出来,有用 到的敬请期待,呵呵,这次不会太久),希望不会让大家失望才好,哈哈。 FlexBus模块,我早在今年年前就写好了并作为开发框架代码

8、的一部分一块上传到了飞思卡尔创意嘉年华小组里了,后来又写了篇FlexBus外扩 SRAM的硬件篇,本来作为核心的软件篇早就该写出来了,结果难产到现在,呵呵,有些东西都忘记了,所以又花费了两天时间熟悉了下,又发现了一些包括软件 和硬件上的小Bug,总算今天让它新鲜出炉了,enjoy it. .好了,说了这么多,下面进入正题了: FlexBus,以前有博友问过我是什么bus,呵呵,其实就是飞思卡尔自己的一种外部总线接口,可以用来扩展诸如外部ROM、SRAM、可编程逻辑 器件或者一些从设备之类的,很灵活方便。我个人觉着感觉挺好用的,自己也实际应用了,扩展了一片ISSI的SRAM,用起来还是比较爽的,

9、不过最开始我的 硬件设计上有点问题(建议看本篇的时候结合我写的关于FlexBus的硬件篇说说K60的FlexBus外扩SRAM接口,有些东西上篇提了我这里就 不重点说了),现在给出改进后的硬件反相电路,以前的FB_AD0的频率达到500k bps以上的时候,FB_AD0_B就会跟不上,波形严重失真,严重的时候三极管不能关断,结果造成反相失败,经过如下改进之后加了一个加速电容,减小集 电极电阻,又在基极加了泄流电阻,提高了三极管开关导通速率(这些是硬件设计的一些经验,这里需要提一下,咱们这些搞嵌入式开发的,不能老是盯着单片机软 件编程这一块,硬件设计很重要,有时候硬件上的一点点改进有可能会提高你

10、的工程质量一个档次),经过测试FB_AD0达到1M以上还是可以正常工作的,不 过如果条件允许的话还是建议用非门反相吧,我当初是为了节省板子面积才折衷了三极管的方式,结果造成了很大的困扰,现在在FlexBusClock 20M以下还可以正常使用,再往上就不敢保证了。以上是对说说K60的FlexBus外扩SRAM接口的那篇博客的补充和更正,呵呵,如果上篇已经熟悉了,就直接跳到该段软件编程部分即可,软件编程 部分,感觉还是比较简单的,思路较清晰,需要操作的寄存器较少,只要在初始化阶段设置好几个寄存器就可以任意操作FlexBus总线了,呵呵,下面就着重 说说软件编程需要的几个寄存器了:(1)FB_CS

11、ARn,即片选地址寄存器:该寄存器即配置相应的外部片选信号FB_CSn的地址范围的(即基地址),即设定BA段为某个基地址,当MCU寻址范围处在该基地址范围的时候,相应的 FB_CSn为低电平,选中相应的外设,从而进行进一步的读写操作。当然这里需要着重强调一下,这个基地址范围不是我们随意设置的,由Kinetis的内 存映射可以看出来,该基地址只在该范围下有效(以前有过博友问过我这个问题,这个地址不能随便设置的),如下:(2)FB_CSMRn,我姑且叫它片选基地址屏蔽寄存器:之所以叫它基地址屏蔽寄存器主要是BAM字段的作用了,由FB_CSAR寄存器可知,它只受32位总线地址的高16位影响,如果设置

12、 FB_CSARn=0x6000_0000,那么在寻址范围在0x6000_00000x6000_FFFF的范围内都是有效的(即FB_CSn有 效),即FlexBus的最小寻址地址块为216=64KB大小,而如果你想要在该基地址范围下寻址更大的范围,嘿嘿,那就要用到BAM字段了,其作用 我觉着用英语表达更容易理解,即Setting a BAM bit causes the correspondingCSAR bit to be a dont care in the decode,直接这么说估计好些人不明白,那我就用例子说明一下,设置 FB_CSARBA=0x6000,FB_CSMRBAM=0x0

13、001,则相应的FB_CS的片选范围为 0x6000_00000x6000_FFFF和0x6001_00000x6001_FFFF连续的128KB的空间,即BAM相应位的作用就是屏 蔽了BA相应位在寻址译码上的作用。说完这个再说下地址连续性的概念,同样设置FB_CSARBA=0x6000,而 FB_CSMRBAM=0x0004的话,则相应的FB_CS的片选范围则是0x6000_00000x6000_FFFF和 0x6004_00000x6004_FFFF这两个不连续的128KB的空间,而如果设置FB_CSMRBAM=0x0007的话,则寻址范围则 为0x6000_00000x6007_FFFF

14、这连续512KB的空间,呵呵,这个寄存器作用理解起来有点难,所以说了这么多,还没明白的还是继续啃 英文datasheet吧。最后要说说FB_CSMRV这个位段,即片选有效信号,这里值得一提的是,MCU复位之后只有FB_CS0有效,如果需要用到其他的片选信号,则必须先置位FB_CSMR0V(注意是CSMR0),然后才能使用其他片选信号。(3)FB_CSCRn,即片选控制寄存器:该寄存器也很重要,涉及到数据端口位数,对齐方式等等,这里就挑我们接下来的软件编程需要的说说。FB_CSCRPS,即数据端口大小,跟 FB_CSCRBLS(对齐方式)配合,决定FlexBus数据总线的端口的分配和大小,我由于

15、采用了8位端口(见我的FlexBus的硬件电路设计 篇)所以进行了相应的设计。(4)FB_CSPMCR,即FlexBus的引脚复用功能控制寄存器这个寄存器涉及到一些复用的选择,根据个人实际应用来配置,所以具体内容还是根据datasheet来设置吧,这里就这么一提,琢磨深入的话还是钻进E文研究一番吧,哈哈 主要的寄存器都介绍完了,其实还有IO管脚的复用寄存器,不过独属于FlexBus模块,而且在以前的应用中也都用过,这里就不提了,下面废话不多说了, 呵呵,直接上代码了,主要是两个函数接口FlexBus的初始化函数和管脚复用选择函数(具体操作我都已经注释了,有中文有E文的,至于为什么老用E 文注释

16、,是因为觉着有的时候用E文注释看起来更明白些,不知道有同感没,嘿嘿):/* Routine: FlexBus_Init(to understand the workfolw, refer to datasheet page714)* Description: initialize the FlexBus for extern SRAM FB_CS - chip select(Chip_S0, Chip_S1, Chip_S2, Chip_S3, Chip_S4, Chip_S5) BASE_ADDRESS- the base address for the corresponding chip

17、 select Port_Size - data port size(BIT_8, BIT_16, BIT_32) Block_Size - Block_64KB, Block_128KB, Block_256KB, Block_512KB, Block_1MB*/void FlexBus_Init(uint8 FB_CS, vuint16* BASE_ADDRESS, uint8 Port_Size, uint8 Block_Size) / Chip select address resgister FB_CSAR_REG(FB_BASE_PTR,FB_CS) = (uint32) BASE

18、_ADDRESS; /* Set base address. */ / Chip select control register FB_CSCR_REG(FB_BASE_PTR,FB_CS) = FB_CSCR_PS(Port_Size) /* Set port size */ | FB_CSCR_AA_MASK | FB_CSCR_ASET(0x1)/ | FB_CSCR_BLS_MASK /* Data is right justified on FB_AD, FB_AD15:0 */ | FB_CSCR_WS(0x1); / Chip select mask register /* *

19、Note: At reset, no chip-select other than FB_CS0 can be used until * the CSMR0V is set. Afterward, FB_CS5:0 functions as programmed. */* Set base address mask for corresponding address space */ FB_CSMR_REG(FB_BASE_PTR,FB_CS) = FB_CSMR_BAM(Block_Size) | FB_CSMR_V_MASK ; /* Enable cs signal */ 下面的函数我根

20、据我的实际板子设计做了些更改,跟我当初上传的不太一样,注意下./* Routine: FlexBus_Pins_Multiplex* Description: configure the pin muliplexing function according to the above seting (FlexBus_Init). Default setting: 20MHz FlexBus clock(Be setted in mcg); 2M*8bits space address 4 chip select signals(cs0, cs1, cs2, cs3)*/void FlexBus_

21、Pins_Multiplex(void) / Chip select port multiplexing control register FB_CSPMCR = FB_CSPMCR_GROUP1(1) /* FB_CS1 */ | FB_CSPMCR_GROUP2(0) /* FB_CS4 */ | FB_CSPMCR_GROUP3(0) /* FB_CS5 */ | FB_CSPMCR_GROUP4(1) /* FB_CS2 */ | FB_CSPMCR_GROUP5(1) /* FB_CS3 */ ; /SIM_CLKDIV1 |= SIM_CLKDIV1_OUTDIV3(0x3); /

22、* Has been setted in mcg.c file */ /* * Configure the pins needed to FlexBus Function (Alt 5) * this example uses low drive strength settings */ /address PORTB_PCR9 = PORT_PCR_MUX(5); / fb_ad20 PORTB_PCR10 = PORT_PCR_MUX(5); / fb_ad19 PORTB_PCR11 = PORT_PCR_MUX(5); / fb_ad18 PORTB_PCR16 = PORT_PCR_M

23、UX(5); / fb_ad17 PORTB_PCR17 = PORT_PCR_MUX(5); / fb_ad16 PORTB_PCR18 = PORT_PCR_MUX(5); / fb_ad15 PORTC_PCR0 = PORT_PCR_MUX(5); / fb_ad14 PORTC_PCR1 = PORT_PCR_MUX(5); / fb_ad13 PORTC_PCR2 = PORT_PCR_MUX(5); / fb_ad12 PORTC_PCR4 = PORT_PCR_MUX(5); / fb_ad11 PORTC_PCR5 = PORT_PCR_MUX(5); / fb_ad10 P

24、ORTC_PCR6 = PORT_PCR_MUX(5); / fb_ad9 PORTC_PCR7 = PORT_PCR_MUX(5); / fb_ad8 PORTC_PCR8 = PORT_PCR_MUX(5); / fb_ad7 PORTC_PCR9 = PORT_PCR_MUX(5); / fb_ad6 PORTC_PCR10 = PORT_PCR_MUX(5); / fb_ad5 PORTD_PCR2 = PORT_PCR_MUX(5); / fb_ad4 PORTD_PCR3 = PORT_PCR_MUX(5); / fb_ad3 PORTD_PCR4 = PORT_PCR_MUX(5

25、); / fb_ad2 PORTD_PCR5 = PORT_PCR_MUX(5); / fb_ad1 PORTD_PCR6 = PORT_PCR_MUX(5); / fb_ad0 /data PORTB_PCR20 = PORT_PCR_MUX(5); / fb_ad31 used as d7 PORTB_PCR21 = PORT_PCR_MUX(5); / fb_ad30 used as d6 PORTB_PCR22 = PORT_PCR_MUX(5); / fb_ad29 used as d5 PORTB_PCR23 = PORT_PCR_MUX(5); / fb_ad28 used as

26、 d4 PORTC_PCR12 = PORT_PCR_MUX(5); / fb_ad27 used as d3 PORTC_PCR13 = PORT_PCR_MUX(5); / fb_ad26 used as d2 PORTC_PCR14 = PORT_PCR_MUX(5); / fb_ad25 used as d1 PORTC_PCR15 = PORT_PCR_MUX(5); / fb_ad24 used as d0 / Default control signals(base on numbers of your peripheral devices or functions) PORTB

27、_PCR19 = PORT_PCR_MUX(5); / fb_oe_b PORTC_PCR11 = PORT_PCR_MUX(5); / fb_rw_b PORTD_PCR1 = PORT_PCR_MUX(5); / fb_cs0_b PORTD_PCR0 = PORT_PCR_MUX(5); / fb_cs1_b PORTC_PCR18 = PORT_PCR_MUX(5); / fb_cs2_b PORTC_PCR19 = PORT_PCR_MUX(5); / fb_cs3_b 函数接口写好了,下面就需要在app函数里调用了,我这里改写了个测试程序(由官方例程改变而成,如有巧合,实属必然,哈哈),最后是运行之后的效果,可 以明显的看到,写进去的数据与读出的数据相符合,测试成功,呵呵,其实有条件的可以看看FB_CSn等几个重要操作信号的波形,那样更直观些,嘿嘿/*

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1