[C] 纯文本查看 复制代码 static void soft_spi_write_data(u16 data, u8 len) {
LCD_SDA_OUT();
for (u8 i = 0; i < len; i++) {
LCD_CLK_L();
if (data & BIT(len - 1)) {
LCD_SDA_H();
} else {
LCD_SDA_L();
}
SS_DELAY();
LCD_CLK_H();
data <<= 1;
SS_DELAY();
}
LCD_CLK_L();
}
static u32 soft_spi_read_data(u8 dummy_cnt, u8 len) {
u32 temp = 0;
u8 i = 0;
LCD_SDA_IN();
for (i = 0; i < dummy_cnt; ){
LCD_CLK_L();
SS_DELAY();
LCD_CLK_H();
i++;
}
for (i = 0; i < len; ) {
LCD_CLK_L();
SS_DELAY();
temp <<= 1;
if (gpio_read(IO_LCD_SDA)) {
temp |= 0x000001;
} else {
temp &= 0xfffffe;
}
LCD_CLK_H();
++i;
SS_DELAY();
}
LCD_CLK_L();
LCD_SDA_OUT();
return temp;
}
bool lcd_nv3022_Check_id(void){
u32 temp = 0;
printf("lcd_nv3022_Check_id\n");
LCD_RESET_H();
LCD_RS_L();
soft_spi_init();
mdelay(2);
LCD_CS_L();
LCD_RS_L();
soft_spi_write_data(0x04, 8);
LCD_RS_H();
temp = soft_spi_read_data(0x01, 24);
LCD_CS_H();
printf("nv3022 id 0x%x\n",temp);
return (0x00333023 == (temp & 0x00ffffff));
}
读不到id基本都是因为发完命令的时候将cs拉高了,发数据的时候再将cs拉低,这样读到的id肯定是不对的,一定要数据都读完才允许拉高cs
|