新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2016-5-11
- 在线时间
- 6 小时
|
5金钱
调试了好几天就是不通 读回的数据一直是0xff,求教论坛大神 我的程序有什么问题 后面附上时序图 并且这个芯片好坑的说 相关spi时序的东西说的特别少 尤其是读数据
采用的是三线spi 一根片选cs 一根sck 一根sdio(双向传递,可以写入或读取数据 读取时需要将读写位置高 也不知道写入的是几位的 手册上没说) 我用的是io口 软件模拟的
sdio 的两个模式初始化
void sdio_in(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA,&GPIO_InitStructure);
void sdio_out(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
写一个字节函数
void writebyte(u8 byte)
{
u8 i=0;
sdio_out();
CS_H
CS_L
SCK_H //pa5=1 sck=1
for(i=0;i<8;i++)
{
SCK_L //pa5=1 sck=1
if((byte >>(7 - i))&0x01)
SDIO_H
else
SDIO_L
SCK_H //pa5=1 sck=1
}
CS_H //pa4=1 ƬѡÖøß
SCK_H
}
读一个字节
u8 readbyte(void)
{
u8 dat =0,i;
u8 dot=0xf0;
sdio_out();
CS_H
CS_L
SCK_H //pa5=1 sck=1
for(i=0;i<8;i++)
{
SCK_L //pa5=1 sck=1
if((dot >>(7 - i))&0x01)
SDIO_H
else
SDIO_L
SCK_H //pa5=1 sck=1
}
// SDIO_H
sdio_in();
SCK_H
for(i=0;i<8;i++)
{
SCK_L
dat |= (SDIO_DATA<<(7-i)); //此处sdio_data 为GPIO_ReadInputDataBit
SCK_H
}
CS_H
return dat;
}
主函数部分为写入一个数 再去读这个数
此处为时序图
|
-
时序图
-
|