[ZLG-ARM] 请问周工如何在2148下把SSP配置成SPI模式

[复制链接]
2995|3
 楼主| justcool 发表于 2008-1-2 23:18 | 显示全部楼层 |阅读模式
不知道使用ZLG的SD卡驱动的话,需要调整什么配置吗?SD卡初始化这一块通过了,但是试图写一块数据的时候,当走到SD_WriteBlockData这个函数时,返回了SD_ERR_DATA_RESP这个错误码,不知是什么原因呢?
zlgarm 发表于 2008-1-3 13:27 | 显示全部楼层

看看你的时钟频率要求

不知你用的晶振频率是多少,SD卡驱动中,SPI速率是在11M的晶振上设计的,而且要保证SPI的时钟计数寄存器S0SPCCR中的值为大于8的偶数.<br /><br />如果要将SSP作为SPI模式的话,需要设置SSP的控制寄存器0,即SSPCR0和SSP控制寄存器1&nbsp;SSPCR1的相关位,具体你可以参考&lt&lt深入浅出ARM7—LPC213x/lpc214x&gt&gt中的SSP控制器这一章。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By&nbsp;zlgarm_zhp<br />
 楼主| justcool 发表于 2008-1-3 21:15 | 显示全部楼层

呵呵

谢谢周工,我现在用的是12M的晶振,以下是两个主要寄存器的设置值,不知正确否,现在无论是发送擦除命令还是写命令都是发送指令帧后SD卡返回的回应帧不为0,是4,这是否代表是对方返回非法指令回应呢,<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPCR0&nbsp;=&nbsp;0x0707;<br />&nbsp;&nbsp;&nbsp;&nbsp;SSPCPSR&nbsp;=&nbsp;0x2;<br /><br />以下是SPI发送和接收函数<br />void&nbsp;SPI_SendByte&nbsp;(uint8&nbsp;ucByte)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;ucDummy;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!(SSPSR&nbsp;&&nbsp;0x02));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR&nbsp;=&nbsp;ucByte;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!(SSPSR&nbsp;&nbsp;&&nbsp;0x04));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucDummy&nbsp;=&nbsp;SSPDR;<br />}<br /><br />uint8&nbsp;SPI_ReceiveByte&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;ucData;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SSPDR&nbsp;=&nbsp;0xFF;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(SSPSR&nbsp;&&nbsp;0x10);<br />&nbsp;&nbsp;&nbsp;&nbsp;ucData&nbsp;=&nbsp;SSPDR;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(ucData);&nbsp;<br />}
 楼主| justcool 发表于 2008-1-4 11:56 | 显示全部楼层

郁闷

我现在初始化都没问题,就是擦除或者读写的时候都不行,返回#define&nbsp;&nbsp;&nbsp;SD_ERR_DATA_RESP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;写单块或多块时,SD卡数据响应令牌不正确<br /><br /><br /><br />/*&nbsp;下面为SD卡使用的硬件条件配置,用户可根据实际需要修改&nbsp;*/<br /><br />/*&nbsp;SCK引脚&nbsp;*/<br />#define&nbsp;&nbsp;SPI_SCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01&nbsp;&lt&lt&nbsp;17)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;&nbsp;SPI_SCK_GPIO()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;&=&nbsp;~(0x03&nbsp;&lt&lt&nbsp;2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;SCK&nbsp;口为GPIO口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_SCK_OUT()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;SPI_SCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;SCK&nbsp;口为输出口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_SCK_CLR()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;|=&nbsp;SPI_SCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;置&nbsp;SCK&nbsp;为低电平&nbsp;*/&nbsp;&nbsp;&nbsp;<br /><br />/*&nbsp;MISO&nbsp;引脚&nbsp;*/&nbsp;<br />#define&nbsp;&nbsp;SPI_MISO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01&nbsp;&lt&lt&nbsp;18)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;&nbsp;SPI_MISO_GPIO()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;&=&nbsp;~(0x03&nbsp;&lt&lt&nbsp;4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;MISO&nbsp;口为GPIO口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_MISO_OUT()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;SPI_MISO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;MISO&nbsp;口为输出口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_MISO_CLR()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;|=&nbsp;SPI_MISO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;置&nbsp;MISO&nbsp;为低电平&nbsp;*/<br /><br />/*&nbsp;MOSI&nbsp;引脚&nbsp;*/&nbsp;<br />#define&nbsp;&nbsp;SPI_MOSI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01&nbsp;&lt&lt&nbsp;19)<br />#define&nbsp;&nbsp;SPI_MOSI_GPIO()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;&=&nbsp;~(0x03&nbsp;&lt&lt&nbsp;6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;MOSI&nbsp;口为GPIO口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_MOSI_OUT()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;SPI_MOSI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;MOSI&nbsp;口为输出口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_MOSI_CLR()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;|=&nbsp;SPI_MOSI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;置&nbsp;MISO&nbsp;为低电平&nbsp;*/<br /><br />/*&nbsp;CS&nbsp;引脚&nbsp;*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;&nbsp;SPI_CS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01&nbsp;&lt&lt&nbsp;20)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />#define&nbsp;&nbsp;SPI_CS_GPIO()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;&=&nbsp;~(0x03&nbsp;&lt&lt&nbsp;8)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;CS&nbsp;口为GPIO口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_CS_OUT()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;|=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;设置&nbsp;CS&nbsp;口为输出口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_CS_SET()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;|=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;置&nbsp;CS&nbsp;为高电平&nbsp;*/<br />#define&nbsp;&nbsp;SPI_CS_CLR()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;|=&nbsp;SPI_CS;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;置&nbsp;CS&nbsp;为低电平&nbsp;*/<br /><br />/*&nbsp;初始化&nbsp;IO&nbsp;口为SPI接口&nbsp;*/<br />#define&nbsp;&nbsp;SPI_INIT()&nbsp;PINSEL1&nbsp;&=&nbsp;~((0x03&nbsp;&lt&lt&nbsp;2)&nbsp;+&nbsp;(0x03&nbsp;&lt&lt&nbsp;4)&nbsp;+&nbsp;(0x03&nbsp;&lt&lt&nbsp;6)&nbsp;+&nbsp;(0x03&nbsp;&lt&lt&nbsp;8));&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PINSEL1&nbsp;|=&nbsp;(0x02&nbsp;&lt&lt&nbsp;2)&nbsp;+&nbsp;(0x02&nbsp;&lt&lt&nbsp;4)&nbsp;+&nbsp;(0x02&nbsp;&lt&lt&nbsp;6)+&nbsp;(0x02&nbsp;&lt&lt&nbsp;8);<br /><br />请周工指点一下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

12

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部