laoguren 发表于 2012-11-5 13:48:13

还是关于主机SPI接收

从机通过I2C采集数据,再通过SPI传给主机(因为主机没有I2C接口,又不想用模拟I2C,太占资源,所以用从机转一下),
现在可以传送数据到主机,但现在问题出现了:
    主机定时每1ms采样一次,给从机发一次空数据,启动SCK,从机传送数据,主机接收。可能第一次传送时正好从机准备好了
收到SCK后直接传给主机,主机接收正确;下次采集时从机还在进行I2C转换,没有来得及将新数据放到发送缓冲器中,这次采集
的数据都是0XFF,主机收到N个0XFF后,从机转换完成,又收到正确数据了。收到的数据如:

正常数据+0xFF+0xFF.............+0xFF+0xFF(15个0XFF)+正常数据+0xFF+0xFF.............+0xFF+0xFF(15个0XFF).................

1)请问怎么知道从机准备好了,主机再启动SCK?或者主机怎么过滤掉没用的数据?
2)我让从机发送有用信息的时候,发帧头0X5A+0XA5,主机收到帧头来识别收到的是有用信息,发现主机不能识别,为什么?
我是在主机1ms定时中断中完成启动SCK和接收从机信号的。
3)我要怎么解决这个问题?谢谢

qwermhb 发表于 2012-11-5 13:55:35

你可以用I2C中断发送数据到主机啊

laoguren 发表于 2012-11-5 14:37:12

主机没有I2C接口,怎么中断啊

laoguren 发表于 2012-11-5 14:40:05

另外,我试了一下,把主从机SPI断开,主机虚发送,启动sck,接收回来的是0XFF,表明主机接收SBUF里默认为0XFF,因为MISO根本没连接,悬空的

yklstudent 发表于 2012-11-5 14:47:18

USART不能用?

laoguren 发表于 2012-11-5 15:10:01

传感器输出只有I2C,主机又没有I2C,用从机转一下

qwermhb 发表于 2012-11-5 15:12:27

laoguren 发表于 2012-11-5 14:37 static/image/common/back.gif
主机没有I2C接口,怎么中断啊

从机用I2C采集数据,在I2C中断里面用SPI发送数据到主机

laoguren 发表于 2012-11-5 16:02:48

这样做有什么好处?可以避免采集无用数据的问题?有点想不通,能详细解释一下么?

laoguren 发表于 2012-11-5 16:06:03

主要问题就是:怎么保证“从机在主机发送数据前准备好数据(放在数据寄存器中)”

eblc1388 发表于 2012-11-5 16:14:23

◆ 从机通过I2C采集数据,再通过SPI传给主机

SPI 模式下是 MASTER 主导通讯,所以你应把从机的 SPI 设为 MASTER,而主机的 SPI 为 SLAVE 就成了。

laoguren 发表于 2012-11-5 16:29:33

现在问题是MOSI另有他用了,板子已经定死了,没法用,肿么办?

eblc1388 发表于 2012-11-5 16:46:56

把主机现在使用中,接到 MOSI 脚的连接改接至 MISO 脚,留出 MOSI 脚作 SPI 之用,因为主机是 SPI SLAVE,不必使用 MISO 脚。记得要更改 DDR记存器。

laoguren 发表于 2012-11-5 16:51:53

看来只能这么办了,在现有基础上的话只能通过软件来解决了。
页: [1]
查看完整版本: 还是关于主机SPI接收