ESP32 官方提供的 spi 驱动能够满足大多数的 spi 外设。但遇到 ch9434,一款四通道串口芯片时发现却无法满足。
无法满足的时序是:写入时地址和数据之间需要1微妙延时,读取时需要3微妙延时。
ESP32 提供了 dummy 做延时,但是在延时的同时会发出时钟,时序无法满足。
查看 esp32 的数据手册,spi_user_reg 寄存器,其实是可以设置在 dummy 期间无时钟输出的。
因此可以通过修改 esp32 提供的函数 spi_ll_set_dmmy(),添加一行代码实现 ch9434 的时序。
然后在 spi 的初始化时,对 dummy_bits 进行配置即可(单位是bit的宽度,因此需要将延时的时间换算一下)
spi_device_interface_config_t devcfg={
...
.dummy_bits = xxx,
...
};