Ieuan 发表于 2023-2-18 10:42:56

STC8H1K08做SPI从机的数据发送问题

现有单主多从的架构,spi主机是imx6ull的硬件spi,从机是stc8h1k08.stc的数据手册有这样一段描述
从机模式的注意事项:
当 CPHA= 0 时, SSIG 必须为 0(即不能忽略 SS 脚)。在每次串行字节开始还发送前 SS 脚必须拉
低, 并且在串行字节发送完后须重新设置为高电平。 SS 管脚为低电平时不能对 SPDAT 寄存器执行写操
作, 否则将导致一个写冲突错误。 CPHA=0 且 SSIG=1 时的操作未定义。
当 CPHA= 1 时, SSIG 可以置 1(即可以忽略脚)。如果 SSIG= 0, SS 脚可在连续传输之间保持低
有效(即一直固定为低电平)。这种方式适用于固定单主单从的系统。
那么在我的这种使用场景,多个stc8作为从机,imx6ull作为主机,stc8收到数据后,还需要在从机模式下返回数据,应该怎么配置stc8的寄存器

zhp 发表于 2023-2-18 21:23:36

SPCTL寄存器中

[*]SSIG:为必须设置为0,即主机选通本从机的SS才进行数据回应
[*]SPEN:必须设置为1
[*]DORD:需要根据SPI主机的数据协议,如果是MSB,DORD就设置为0,否则就设置为1
[*]MSTR:位必须设置为0,表示是从机
[*]CPOL和CPHA:也需要根据主机的SPI模式的电平来进行设置
[*]SPR:从机忽略此位,可设置为0

Ieuan 发表于 2023-2-20 14:58:12

zhp 发表于 2023-2-18 21:23
SPCTL寄存器中

[*]SSIG:为必须设置为0,即主机选通本从机的SS才进行数据回应


我按照你说的设置了,但是由于需求是SPI主机连续发8字节,从机(STC8H)再连续回复8字节。在从机回复的时候,会陷入写冲突(由于主机需要提供SCLK给从机发送数据且MOSI上仍然有全部为零的数据,导致从机误认为还在接收)。这种情况如何解决?

zhp 发表于 2023-2-20 15:34:13

Ieuan 发表于 2023-2-20 14:58
我按照你说的设置了,但是由于需求是SPI主机连续发8字节,从机(STC8H)再连续回复8字节。在从机回复的时候 ...

这是上层通信协议的问题,主机和从机需要配合好才行
另外,SPI数据传输中没有单独的读操作或者写操作,读写是同时进行的

梁工 发表于 2023-2-20 16:15:17

Ieuan 发表于 2023-2-20 14:58
我按照你说的设置了,但是由于需求是SPI主机连续发8字节,从机(STC8H)再连续回复8字节。在从机回复的时候 ...

不会陷入写冲突的,当从机返回数据时,主机发CLK,同时发的数据忽略即可。SPI通讯要有协议的。

wxli 发表于 2023-3-3 15:13:16

在主机发每一个字节数据后延迟一定时间,让从机有足够时间处理接收到的数据,并将需要发送到主机的数据送往SPDAT。
页: [1]
查看完整版本: STC8H1K08做SPI从机的数据发送问题