[Kinetis] KL25小板读写93C46的问题

[复制链接]
1265|10
 楼主| JY-DX-JY 发表于 2015-8-16 19:13 | 显示全部楼层 |阅读模式
本帖最后由 JY-DX-JY 于 2015-8-16 20:05 编辑

我用KL25小板读写93C46,成功了但是有个问题:
就是读程序,如下:
//读
uint_8 READ(uint_8 addr)
{
uint_8 temp1;
gpio_set(PORTA,14,1);
for(i=0;i<10;i++);
SPI_send1(SPI_0,0x06);              //写命令
SPI_send1(SPI_0,addr<<1);       //写地址,因为93C46读时序有一个虚拟0位,所以发数据多发了一位
SPI_send1(SPI_0,0xff);              //虚写
temp1=SPI_receive1(SPI_0);     //读数据
temp1=SPI_receive1(SPI_0);    //读数据
for(i=0;i<100;i++);
gpio_set(PORTA,14,0);

return temp1;
}
2.jpg
我不明白为什么要读两次才成功,读一次就不对。
下面是SPI读程序
uint_8 SPI_receive1(uint_8 SPI_No)
{
    SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No);
    while(!(SPI_S_REG(baseadd)& SPI_S_SPRF_MASK)); //检测SPI1是否收到了数据。
        return SPI_D_REG(baseadd);   
}
请高手解惑,谢谢!
Messi1999 发表于 2015-8-16 20:43 | 显示全部楼层
SPI的发送命令和读写命令是严格按照芯片手册的来的吗
小猫爱吃鱼 发表于 2015-8-16 21:04 | 显示全部楼层
是不是开始要空读一下呢?
 楼主| JY-DX-JY 发表于 2015-8-17 08:29 | 显示全部楼层
Messi1999 发表于 2015-8-16 20:43
SPI的发送命令和读写命令是严格按照芯片手册的来的吗

是的
 楼主| JY-DX-JY 发表于 2015-8-17 08:30 | 显示全部楼层
小猫爱吃鱼 发表于 2015-8-16 21:04
是不是开始要空读一下呢?

不知道,以前空写一个字节倒是遇到过,没遇到过空读。
FSL_TICS_Jeremy 发表于 2015-8-17 09:02 | 显示全部楼层
你是用逻辑分析仪或者示波器看看波形,是否与数据手册上的一致吧
clnbcl 发表于 2015-8-17 09:11 | 显示全部楼层
现在还要用93C46啊?
用内置eeprom的mcu吧。
 楼主| JY-DX-JY 发表于 2015-8-17 09:21 | 显示全部楼层
FSL_TICS_Jeremy 发表于 2015-8-17 09:02
你是用逻辑分析仪或者示波器看看波形,是否与数据手册上的一致吧

看起来一样啊
 楼主| JY-DX-JY 发表于 2015-8-17 09:22 | 显示全部楼层
clnbcl 发表于 2015-8-17 09:11
现在还要用93C46啊?
用内置eeprom的mcu吧。

我做实验的,不是产品
小狗爱吃骨头 发表于 2015-8-18 10:55 | 显示全部楼层
楼主问题解决了吗,我倒是没遇到过这样的问题
 楼主| JY-DX-JY 发表于 2015-8-18 11:23 | 显示全部楼层
没有,就那样吧。反正读写正常了,我不管那么多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

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