新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2020-6-29
- 在线时间
- 7 小时
|
1金钱
本帖最后由 梦星银魂 于 2024-5-9 00:37 编辑
所使用到的SPI引脚:
GPIO4_C2_d GPIO4_C3_d GPIO4_C5_d
CS引脚采用 GPIO4_C4 的GPIO功能,SPI接淘宝常见的SPI FLASH模块w25q32:
初始化的第一条指令先读SPI FLash的ID,结果发现,全是0,仿佛SPI没启动起来。
不接SPI FLASH,直接接逻辑分析仪,发现SPI的CLK有输出,但是MOSI始终为0
本人使用的设备树:
rk3568-atk-atompi-ca1.dts
...
&spi3{
/* 选择引脚 */
pinctrl-names = "default";
pinctrl-0 = <&spiflash_gpio>;
status = "okay";
flash_w25q32:w25q32@00{
reg = <0x00>;
compatible = "alientek,w25q32";
spi-max-frequency = <24000000>;
/* 选择引脚GPIO4_C4 默认状态下是高电平 */
cs-gpio = <&gpio4 RK_PC4 GPIO_ACTIVE_HIGH>;
};
};
&pinctrl {
...
/* spi flash gpio 引脚 */
spiflash{
spiflash_gpio:pinspiflash{
rockchip,pins =
/* spi3_clkm1 */ /* 这里的软件配置上拉不知道有没有鸟用 */
<4 RK_PC2 2 &pcfg_pull_up_drv_level_1>,
/* spi3_misom1 */
<4 RK_PC5 2 &pcfg_pull_up_drv_level_1>,
/* spi3_mosim1 */
<4 RK_PC3 2 &pcfg_pull_up_drv_level_1>,
/* cs gpio */
<4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up_drv_level_1>;
};
};
...
};
所使用到的测试驱动文件已经放到了附件中,出问题的是:
static int spi_read_w25x_id_0(struct spi_device *spi)
{
int status = 0;
char tbuf[5] = {READ_UID}; //READ_UID为0x9F 读取SPI Flash的ID
char rbuf[5] = {0};
struct spi_transfer t = {
.tx_buf = tbuf,
.len = ARRAY_SIZE(tbuf),
};
struct spi_transfer r = {
.rx_buf = rbuf,
.len = ARRAY_SIZE(rbuf),
};
struct spi_message m = {0};
spi_message_init(&m);
spi_message_add_tail(&t, &m);
spi_message_add_tail(&r, &m);
status = spi_sync(spi, &m);
dev_err(&spi->dev, "ID =%02x %02x %02x %02x %02x\r\n", \
rbuf[0], rbuf[1], rbuf[2], rbuf[3], rbuf[4]);
return status;
}
MOSI引脚一直没信号。
恳请论坛里的高手或者官方大大能给与解答,不胜感激之至。
|
|