HI Cherry
我已经测试过上个问题,现在我有一个疑问,当我模拟spi 时,我的读写数据是不是要在同一个周期内完成?具体模拟spi的测试代码如下所示。
而且当前通过回读取drv8705 的寄存器(0x00,0x01,0x2),无任何错误,但是接电机的两端依旧是高电平。现在无任何错误,接电机的两端依旧都是高电平,请问现在我需要如何操作,解决该问题?
模拟spi 的测试代码,如下所示:





通过模拟spi 读取drv8705 寄存器的测试代码:


uint8 SPI_Simulate_DataHandle(uint16 u16outputdata, uint16 *pinputdata)
{
uint8 u8_rtn_val;
uint8 u8writedata;
uint8 u8readdata;
uint16 u16readdata;
u8_rtn_val = 0;
u8writedata = 0;
u8readdata = 0;
u16readdata = 0;
if(NULL_PTR != pinputdata)
{
#if 1
/* set sclk low */
SPI_Simulate_SetSCLK(0);//PTP &= (~0x40);
SPI_Simulate_Delayus(SPI_SIMULATE_DELAY_TIME); /* delay 1.5us */
/* set cs high */
SPI_Simulate_SetCS(1);//PTP |= 0x20;
SPI_Simulate_Delayus(SPI_SIMULATE_DELAY_TIME); /* delay 1.5us */
/* set cs low */
SPI_Simulate_SetCS(0);//PTP &= ~(0x20);
for(uint8 i=0; i<16; i++)
{
/* set sclk high */
SPI_Simulate_SetSCLK(1);//PTP |= (0x40);
u8writedata = (u16outputdata >> (15 - i)) & 0x01;
if(0x01 == u8writedata)
{
PTP_PTP0 = 1;
}
else
{
PTP_PTP0 = 0;
}
//SPI_Simulate_Delayus(2); /* delay 1.5us */
//u8writedata = ((uint8)(u16outputdata << (15 - i))) & 0x01;
//SPI_Simulate_OWHandle(u8writedata);//PTP |= u8writedata;
SPI_Simulate_Delayus(SPI_SIMULATE_DELAY_TIME); /* delay 1.5us */
/* set sclk low */
SPI_Simulate_SetSCLK(0);//PTP |= (~0x40);
SPI_Simulate_ORHandle(&u8readdata);//u16readdata |= PTT >> 7;
u16readdata |= ((uint16)u8readdata) << i;
SPI_Simulate_Delayus(SPI_SIMULATE_DELAY_TIME); /* delay 1.5us */
}
*pinputdata = u16readdata;
/* set cs high */
SPI_Simulate_SetCS(1);//PTP |= 0x20;
#else
SPI_Simulate_WriteData(u16outputdata);
SPI_Simulate_Delayus(SPI_SIMULATE_DELAY_TIME); /* delay 1.5us */
SPI_Simulate_ReadData(pinputdata);
#endif
}
else
{
/* input parameter is null */
u8_rtn_val = 1;
}
return u8_rtn_val;
}
通过示波器回读到的drv8705 寄存器的0x00,0x01,0x02 的值如下:(从示波器上看,无错误)

in1/EN ,电机接线端A,B,如下所示:



