|
关于使用WT588D-20SS芯片中出现的问题想咨询各位前辈
我是用usb转换器来将生成的bin文件写入到外接flash中,参考数据手册上的实例代码和时序写完三线控制驱动,但是上电后WT588D并没有任何反应,BUSY引脚毫无反应,对WT588复位后依然无效。请问是我的代码出了问题还是哪里操作的不正确
本人代码:
#include "wt588d.h"
#define CS_PIN GPIO_PIN_1
#define CS_PORT GPIOA
#define SCL_PIN GPIO_PIN_2
#define SCL_PORT GPIOA
#define SDA_PIN GPIO_PIN_3
#define SDA_PORT GPIOA
// 初始化GPIO
void WT588D_GPIO_Init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
// 配置CS/CLK/DAT为推挽输出
gpio_init(CS_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,CS_PIN);
gpio_init(SCL_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,SCL_PIN);
gpio_init(SDA_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ,SDA_PIN);
// 初始状态
GPIO_BOP(CS_PORT) = CS_PIN; // CS高电平
GPIO_BOP(SCL_PORT) = SCL_PIN; // CLK高电平
GPIO_BOP(SDA_PORT) = SDA_PIN; // DAT高电平
}
// 发送8位命令
void WT588D_SendCommand(uint8_t cmd)
{
/* 可选复位 */
// GPIO_BC(WT588D_RST_PORT) = WT588D_RST_PIN; // RST拉低
// delay_ms(5); // 保持≥5ms
// GPIO_BOP(WT588D_RST_PORT) = WT588D_RST_PIN; // RST拉高
// delay_ms(20); // 等待>17ms
/* 唤醒芯片 */
GPIO_BC(CS_PORT) = CS_PIN; // CS拉低
delay_1ms(5); // 保持5ms唤醒
/* 发送8位数据 (LSB first) */
for(uint8_t i = 0; i < 8; i++)
{
GPIO_BC(SCL_PORT) = SCL_PIN; // CLK拉低
// 设置数据位
if(cmd & 0x01)
{
GPIO_BOP(SDA_PORT) = SDA_PIN; // 输出1
}
else
{
GPIO_BC(SDA_PORT) = SDA_PIN; // 输出0
}
cmd >>= 1; // 准备下一位
delay_1us(188); // 数据稳定时间 (150us)
GPIO_BOP(SCL_PORT) = SCL_PIN; // CLK上升沿锁存
delay_1us(188); // 高电平保持 (总周期300us)
}
/* 结束传输 */
GPIO_BOP(CS_PORT) = CS_PIN; // CS拉高
// BUSY信号将在20ms后响应
}
|
|