|
发表于 2020-11-4 10:41:27
只看该作者
沙发
解决了,确实不能支持spi-cs-high。
根据W25Q64手册,erase write enable等操作,需要在CMD发出后将CS脚拉高
用逻辑分析仪看:
在调用spidev_sync(spidev, &m),其中spi_message视为一次传输的包,即传输完毕后CS将会自动拉高
因此只需要把CMD作为一次单独的spi_message即可让flash处理相应CMD,如:
static int firefly_spi_w25x_write_enable(struct spi_device *spi)
{
int status;
char cmd_buf[1] = {WRITE_ENABLE};
struct spi_transfer cmd = {
.tx_buf = cmd_buf,
.len = ARRAY_SIZE(cmd_buf),
};
struct spi_message m;
spi_message_init(&m);
spi_message_add_tail(&cmd, &m);
status = spi_sync(spi, &m);
dev_dbg(&spi->dev, "write enable\n");
return status;
} |
|