armink / SFUD

An using JEDEC's SFDP standard serial (SPI) flash universal driver library | 一款使用 JEDEC SFDP 标准的串行 (SPI) Flash 通用驱动库
MIT License
1.29k stars 452 forks source link

难道必须使用C99的语法才能完成特定的功能? #1

Closed shentqlf closed 7 years ago

shentqlf commented 7 years ago

现在有些工程下C99编译不过去,但是这个固件库只能使用C99编译过去,我在想难道只能用C99才能实现你的功能吗?能不能用默认的C89实现?

armink commented 7 years ago

首先没有足够充分的理由说服我来继续使用 C89,使用 C99 还能带来更好的可读性、可扩展性。再说了 C89 都什么年代的标准了,C99 出来都快 20 年了,尽快向新标准靠近,是时代所趋。

shentqlf commented 7 years ago

恩,我修改了参数也能编译过去。

shentqlf commented 7 years ago

我试着修改你的例程里面的芯片为W25Q16, 我修改了CS static spi_user_data spi1 = { .spix = SPI1, .cs_gpiox = **GPIOA**, .cs_gpio_pin = **GPIO_Pin_15** };

        /* CS: Pa15 */
        GPIO_InitStructure.GPIO_Pin = **GPIO_Pin_15**;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(**GPIOA**, &GPIO_InitStructure);
        GPIO_SetBits(**GPIOA**, **GPIO_Pin_15**);

修改sfud_cfg.h中的

enum {
    SFUD_W25Q32BV_DEVICE_INDEX  = 0,
};
#define SFUD_FLASH_DEVICE_TABLE                                                \
{                                                                              \
    [SFUD_W25Q32BV_DEVICE_INDEX] = {.name = "W25Q64BV", .spi.name = "SPI1"},       \
}

修改:sfud_port.c中的 case SFUD_W25Q32BV_DEVICE_INDEX:

但是还不成功,还需要修改哪里
armink commented 7 years ago

什么不成功?SFUD 初始化?

shentqlf commented 7 years ago

image

armink commented 7 years ago

检查 SPI 硬件,最好用逻辑分析仪看下。这个很明显是 SPI 没有驱动正确。

shentqlf commented 7 years ago

我看代码本身就是SPI1的PA5\6\7,我的硬件是没问题,我用别的代码测试过了。片选我的是PA15。也改了。

cancore commented 7 years ago

@shentqlf 你是不是没改SFUD_FLASH_CHIP_TABLE 里边的内容,应该增加: {"W25Q16BV", SFUD_MF_ID_WINBOND, 0x40, 0x15, 2*1024*1024, SFUD_WM_PAGE_256B, 4096, 0x20},

armink commented 7 years ago

它的 SPI 读取回来数据都是错误的,全是零。优先检查 SPI 通信。

@shentqlf 确认 MISO 也有数据?

cancore commented 7 years ago

是的,看起来SPI驱动有问题,怎么读回来都是0,PA15是特殊引脚,JTAG口中的TDI也是用它的,用不好会出问题

shentqlf commented 7 years ago

@cancore 是的~~~ image 这样就是没问题了呗

shentqlf commented 7 years ago

@armink 谢谢,这个工具非常棒。就是现在感觉port这一块感觉太复杂了。需要简化下

armink commented 7 years ago

@shentqlf 移植也就是 SPI 驱动的移植,这块确实是用户的痛点,你也可以考虑下如何改进这块,说说你的设计思路,大家集思广益。另外,针对这个痛点,目前正在计划中的是增加软件模拟 SPI 驱动。

shentqlf commented 7 years ago

嘿嘿我移植完成后,可以在阿莫论坛里放一个版本,你看看如何,应该会比较清爽些。

armink commented 7 years ago

好的,多考虑兼容性就好。

shentqlf commented 7 years ago

雏形弄好了。今天晚上优化下。顺便软件SPI也就加上了