imx6 spi5 按字片选 及 按数据包片选的实现

在之前一篇 blog 中提到的一个关于 spi5 片选的困惑:

现在有了解决方案:

关键处在于 board-mx6q_sabresd.h 中关于 spi5 CS管脚 模式的配置

1)将 SS0 配置成 IO模式时,

MX6Q_PAD_SD2_CLK__ECSPI5_SCLK,
MX6Q_PAD_SD2_DAT0__ECSPI5_MISO,
MX6Q_PAD_SD2_CMD__ECSPI5_MOSI,
MX6Q_PAD_GPIO_7__ECSPI5_RDY,
MX6Q_PAD_SD2_DAT1__GPIO_1_14, // ss0

有如下效果(一包数据一个片选,一包7字节):

2)将SS0 配置成 spi5 的标准 CS时

MX6Q_PAD_SD2_CLK__ECSPI5_SCLK,
MX6Q_PAD_SD2_DAT0__ECSPI5_MISO,
MX6Q_PAD_SD2_CMD__ECSPI5_MOSI,
MX6Q_PAD_GPIO_7__ECSPI5_RDY,
MX6Q_PAD_SD2_DAT1__ECSPI5_SS0, // ss0 for spi5

有如下效果(字大小为1B, 一包数据7个字,有7个片选):

 

通过观察如上两个图的 clk 我们发现即使片选是按数据包进行使能的,每个字都有一个CLK ,每个CLK之间有一个小的延时(5us左右)。

这在本质上还是 imx6 的 multi-burst 模式。

如下 imx6 datasheet 中描述:

如果要想数据包中的每个 bit 都有时钟的话,只能配置成 sigle-burst 模式。

参考:

结果是:当我们把 spi5 的 CS 配置成IO模式后,CS 会在数据包内一直有效。这样的配置可以完成与 flash 的 spi 通信。

 

posted @ 2015-05-15 10:35  阿青1987  阅读(314)  评论(0编辑  收藏  举报