Closed shentqlf closed 7 years ago
首先没有足够充分的理由说服我来继续使用 C89,使用 C99 还能带来更好的可读性、可扩展性。再说了 C89 都什么年代的标准了,C99 出来都快 20 年了,尽快向新标准靠近,是时代所趋。
恩,我修改了参数也能编译过去。
我试着修改你的例程里面的芯片为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:
但是还不成功,还需要修改哪里
什么不成功?SFUD 初始化?
检查 SPI 硬件,最好用逻辑分析仪看下。这个很明显是 SPI 没有驱动正确。
我看代码本身就是SPI1的PA5\6\7,我的硬件是没问题,我用别的代码测试过了。片选我的是PA15。也改了。
@shentqlf 你是不是没改SFUD_FLASH_CHIP_TABLE 里边的内容,应该增加:
{"W25Q16BV", SFUD_MF_ID_WINBOND, 0x40, 0x15, 2*1024*1024, SFUD_WM_PAGE_256B, 4096, 0x20},
它的 SPI 读取回来数据都是错误的,全是零。优先检查 SPI 通信。
@shentqlf 确认 MISO 也有数据?
是的,看起来SPI驱动有问题,怎么读回来都是0,PA15是特殊引脚,JTAG口中的TDI也是用它的,用不好会出问题
@cancore 是的~~~ 这样就是没问题了呗
@armink 谢谢,这个工具非常棒。就是现在感觉port这一块感觉太复杂了。需要简化下
@shentqlf 移植也就是 SPI 驱动的移植,这块确实是用户的痛点,你也可以考虑下如何改进这块,说说你的设计思路,大家集思广益。另外,针对这个痛点,目前正在计划中的是增加软件模拟 SPI 驱动。
嘿嘿我移植完成后,可以在阿莫论坛里放一个版本,你看看如何,应该会比较清爽些。
好的,多考虑兼容性就好。
雏形弄好了。今天晚上优化下。顺便软件SPI也就加上了
现在有些工程下C99编译不过去,但是这个固件库只能使用C99编译过去,我在想难道只能用C99才能实现你的功能吗?能不能用默认的C89实现?