qzf368 发表于 2009-8-18 23:44:51

2812和M16用SPI通信的问题

主从的时钟到底该怎么设置?
我做了好几次实验,2812用做主,M16做从
如果设置2812的CLK极性为0,相位为0,那么M16就要设置成CPOL=0 CPHA=1才能采到数据,而且出错率很高!
如果设置2812的CLK极性为0,相位为1,那么M16就要设置成CPOL=0 CPHA=0才可以。怎么SPI时钟的设置不是对应相同的呢?
我把2812的字符长度设为8位的,FIFO延时也要设为至少是1才可以通信
不会是晶振的问题,我把2812的频率已经设成够慢的了

qzf368 发表于 2009-8-19 15:37:56

已基本解决
用M16做主 2812的收发都没问题
用2812做主 双方的收发都还有问题
2812的晶振22.1184M 一倍频 低速时钟为4分频
SPIBRR设置为30的时候才没有检测到错误 根本不像说的不超过从设备主频的1/4就可以
M16的晶振7.3728M

machao 发表于 2009-8-22 10:44:16

你理解“不超过从设备主频的1/4”可能有问题。

AVR的SPI工作在从机时,SPI口的时钟设置,应该不超过主机SPI时钟的1/4。这个SPI时钟是指SPI口上SCK时钟的频率,不是2812的系统时钟,也不是AVR自己的系统时钟。

你的逻辑电路基础还需要加强。
页: [1]
查看完整版本: 2812和M16用SPI通信的问题