This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于DM8127中linux的SPI问题



大家好,

      我使用的软件版是DM8127_IPNC_3.50.00,在我们的硬件上有s25fl256s的SPI flash。该spi flash在u-boot已经调试通过。

在linux下我的操作是:

1,硬件使用的是SPI0,CS使用的是SPI0_CS0。U-boot正常,硬件应该没有问题。

2,在board-ti8148ipnc.c配置了

const struct flash_platform_data ti8148_spi_flash = {
.type = "s25fl256s",//.type = "s25fl256s",S25FL256S-00
.name = "spi_flash",
.parts = ti8148_spi_partitions,
.nr_parts = ARRAY_SIZE(ti8148_spi_partitions),
};

struct spi_board_info __initdata ti8148_spi_slave_info[] = {
{
.modalias = "m25p80",
.platform_data = &ti8148_spi_flash,
.irq = -1,
.max_speed_hz = 75000000,
.bus_num = 1,
.chip_select = 0,
.mode =SPI_MODE_3,
},
};

,配置好后,在m25p80.c中已经探测到设备(执行m25p_probe),但是在jedec_probe()中调用tmp = spi_write_then_read(spi, &code, 1, id, 5);读取flash的ID时,读起来的全部是FF。请问是什么原因?

  • 是不是要进行管脚配置啊,我配置为:

    omap_mux_init_signal("spi0_sclk", OMAP_MUX_MODE0);
    omap_mux_init_signal("spi0_d1", OMAP_MUX_MODE0);
    omap_mux_init_signal("spi0_d0", OMAP_MUX_MODE0);
    omap_mux_init_signal("spi0_cs0", OMAP_MUX_MODE0);

    读出来全是0.

    如果是管脚配置,应该怎么配置?

  • 在ti8148_spi_init()中添加

    omap_writel(0x01, 0x48140940);//anger add spi0 SPI[0]_CS[0]
    omap_writel(0x01, 0x48140944);//anger add spi0 SPI[0]_SCLK
    omap_writel(0x01, 0x48140948);//anger add spi0 SPI[0]_D[1]
    omap_writel(0x01, 0x4814094C);//anger add spi0 SPI[0]_D[0]

    复用后,读取设备的id是0,通过读取配置数据,读取的是0x01,和配置的相同。

    printk("anger spi_init _CS=0x%x,_SCLK=0x%x,_D[1]=0x%x,D[0]=%x\n",
    omap_readl(0x48140940),omap_readl(0x48140944),
    omap_readl(0x48140948),omap_readl(0x4814094C));

    请问还有什么地方需要注意啊?