SPI设定及使用


为了设定SPI或是使用需要使用pid_ioctl函数。SPI支持的pid_ioctl函数的命令目录如下。

命令 下级命令 说明
set lsb 0 set a bit transmission order: MSB first
1 set a bit transmission order: LSB first
data 8 set a size of data unit: 8 bits
16 set a size of data unit: 16 bits
div [N] set a division: 2/4/8/16/32/64/128/256
mode [M] set an SPI mode: 0/1/2/3
get rxlen get the number of pending bytes in receive buffer
txlen get the number of pending bytes in send buffer
req start request to write data
reset request to reset bus

SPI设定

SPI通过"set"命令设定通信模式、数据传送顺序、数据传送单位及通信速度。

设定数据传送顺序

PHPoC的SPI数据传送顺序可在0或者1中选择,在没有设定数据传送顺序时,基本使用的值是0。0表示自MSB传送。设定方法如下。

区分 语法
MSB > LSB pid_ioctl($pid, "set lsb 0");
LSB > MSB pid_ioctl($pid, "set lsb 1");

设定传送数据单位

PHPoC的SPI数据传送单位可以选择8或是16字节中的一个,基本参数是8。设定方法如下。

区分 语法
8 bits pid_ioctl($pid, "set data 8");
16 bits pid_ioctl($pid, "set data 16");

设定数据通信速度

数据通信速度设定参数为PHPoC的默认时钟分割率,可选择 2 / 4 / 8 / 16 / 32 / 64 / 128 / 256中的一个。基本参数值为256,设定参数如下。

请参考如何设定数据。

区分 语法
1 of N pid_ioctl($pid, "set div N");

※ P4S-341/P4S-342的基本时钟是42MHz。分割率为256时,数据速率约为164Kbps。

SPI模式

SPI模式是在0至3中选择一个设定。基本值是3,设定方法如下。

SPI 模式 语法
mode 0 pid_ioctl($pid, "set mode 0");
mode 1 pid_ioctl($pid, "set mode 1");
mode 2 pid_ioctl($pid, "set mode 2");
mode 3 pid_ioctl($pid, "set mode 3");

读取SPI状态

SPI通过"get"命令确认各种状态信息。

读取发送/接收缓冲区字节数

在SPI中发送或是接收缓冲区的字节数可如下进行确认。

区分 语法
Send buffer pid_ioctl($pid, "get txlen");
Receive buffer pid_ioctl($pid, "get rxlen");

使用SPI

发送数据邀请

要求发送SPI数据的命令。 在执行此命令前必须利用pid_write函数把需要发送的数据放在缓冲区内。 另外,发送数据后,需要通过pid_read函数读取已发送的数据大小数据。 使用方法如下。

命令 语法
Request to Write Data pid_ioctl($pid, "req start");

初始化总线

当SPI通信不是很流畅时。可通过此命令初始化SPI总线。

命令 语法
Request to Request Bus pid_ioctl($pid, "req reset");