Lis3dh芯片SPI通讯疑问,求大神点拨!

gaoshoufenmu 2018-01-19 09:13:21
问题描述:主芯片1728工作在主模式(提供时钟,片选),lis3dh为从控芯片,四线制全双工。
目前用示波器查看MTSR,与MRST引脚信号均正常!说明时钟,片选,时序逻辑均ok,但是读取RB(接受缓存寄存器)数据一直是0,导致无法读取出来通过can发出来。
主代码:
//读取接受缓存寄存器函数
short SSC2_usGetData(void)
{
SSC2_RSRC.B.CLRR = 1;

return(SSC2_RB.U);
}

//发送读取指令及地址
short ReadData(unsigned char Axisaddr)
{
BYTE Value = 0x00;
int index = 0x00;

Value = ((1<<7) | (0<<6) | Axisaddr); // 1--读 Axisaddr-读取地址

//0.select channel
SSC2_SSOC.U = 0x00000100;
//1.checking the SSC2 status of the busy flag
for(index = 0; index < SSC2Delay; index++)
{
if(SSC2_STAT.B.BSY == 0)

break;
}
//2. load transmit buffer register
SSC2_vSendData(Value);

//3.reset receive interrupt request
SSC2_RSRC.B.CLRR = 1;

//4. send a invalid data to generate a SCLK signal
SSC2_vSendData(0x00);

//5. check if new data has been received
while( !SSC2_RSRC.B.SRR );

return (SSC2_usGetData());
}

...全文
844 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
不落小太阳 2018-01-25
  • 打赏
  • 举报
回复
引用 8楼我是你的主体 的回复:
[quote=引用 7 楼 u012734031 的回复:] [quote=引用 6楼我是你的主体 的回复:][quote=引用 5 楼 u012734031 的回复:] 最近在调试am5718的spi,现象跟楼主是一样的,原因可能是接收的buffer没有使能,建议看一下pinmux部分
此时从机发送,主机接受,您的意思是主机应开启接受缓存使能?但是1728SSC寄存器配置的TB,RB寄存器无使能选项,默认开启的呀。[/quote]LZ用的芯片我不太清楚,我用的那个am5718内部有fifo,fifo之前还有一个recv buffer,这个recv buffer在那个spi的那个引脚pinmux寄存器中,有一个是recv enable的一位,那个需要使能,数据进来应该是先进移位寄存器,然后再进入到recv buffer中,LZ可以看下你用的那款芯片上面有没有关于recv buffer的配置,或者是看一下引脚的方向有的芯片也是需要配置的。[/quote] 谢谢!我也再次查了下,1728的确没有关于收发缓存寄存器的控制配置等设置,该接收引脚也是设置成输入引脚。还需要查找其他原因。[/quote]好的,期待LZ解决问题的方法~
gaoshoufenmu 2018-01-25
  • 打赏
  • 举报
回复
引用 7 楼 u012734031 的回复:
[quote=引用 6楼我是你的主体 的回复:][quote=引用 5 楼 u012734031 的回复:] 最近在调试am5718的spi,现象跟楼主是一样的,原因可能是接收的buffer没有使能,建议看一下pinmux部分
此时从机发送,主机接受,您的意思是主机应开启接受缓存使能?但是1728SSC寄存器配置的TB,RB寄存器无使能选项,默认开启的呀。[/quote]LZ用的芯片我不太清楚,我用的那个am5718内部有fifo,fifo之前还有一个recv buffer,这个recv buffer在那个spi的那个引脚pinmux寄存器中,有一个是recv enable的一位,那个需要使能,数据进来应该是先进移位寄存器,然后再进入到recv buffer中,LZ可以看下你用的那款芯片上面有没有关于recv buffer的配置,或者是看一下引脚的方向有的芯片也是需要配置的。[/quote] 谢谢!我也再次查了下,1728的确没有关于收发缓存寄存器的控制配置等设置,该接收引脚也是设置成输入引脚。还需要查找其他原因。
不落小太阳 2018-01-24
  • 打赏
  • 举报
回复
引用 6楼我是你的主体 的回复:
[quote=引用 5 楼 u012734031 的回复:] 最近在调试am5718的spi,现象跟楼主是一样的,原因可能是接收的buffer没有使能,建议看一下pinmux部分
此时从机发送,主机接受,您的意思是主机应开启接受缓存使能?但是1728SSC寄存器配置的TB,RB寄存器无使能选项,默认开启的呀。[/quote]LZ用的芯片我不太清楚,我用的那个am5718内部有fifo,fifo之前还有一个recv buffer,这个recv buffer在那个spi的那个引脚pinmux寄存器中,有一个是recv enable的一位,那个需要使能,数据进来应该是先进移位寄存器,然后再进入到recv buffer中,LZ可以看下你用的那款芯片上面有没有关于recv buffer的配置,或者是看一下引脚的方向有的芯片也是需要配置的。
gaoshoufenmu 2018-01-24
  • 打赏
  • 举报
回复
引用 5 楼 u012734031 的回复:
最近在调试am5718的spi,现象跟楼主是一样的,原因可能是接收的buffer没有使能,建议看一下pinmux部分
此时从机发送,主机接受,您的意思是主机应开启接受缓存使能?但是1728SSC寄存器配置的TB,RB寄存器无使能选项,默认开启的呀。
不落小太阳 2018-01-24
  • 打赏
  • 举报
回复
最近在调试am5718的spi,现象跟楼主是一样的,原因可能是接收的buffer没有使能,建议看一下pinmux部分
gaoshoufenmu 2018-01-22
  • 打赏
  • 举报
回复

上传发数据波形和接受数据波形,目前就是读RB寄存器读不出来,所以和时钟,片选,逻辑都没什么关系啊。。。
gaoshoufenmu 2018-01-20
  • 打赏
  • 举报
回复
引用 1 楼 faihung 的回复:
引脚信号正常说明硬件没有问题,不会是你程序根本就没有发吧,或者是你程序调用驱动有问题。
程序应该是发的,如果没有发,spi芯片怎么会有输出,目前好像是主芯片缓存寄存器里一直没有数据。
faihung 2018-01-20
  • 打赏
  • 举报
回复
引脚信号正常说明硬件没有问题,不会是你程序根本就没有发吧,或者是你程序调用驱动有问题。
faihung 2018-01-20
  • 打赏
  • 举报
回复
引用 2楼我是你的主体 的回复:
[quote=引用 1 楼 faihung 的回复:] 引脚信号正常说明硬件没有问题,不会是你程序根本就没有发吧,或者是你程序调用驱动有问题。
程序应该是发的,如果没有发,spi芯片怎么会有输出,目前好像是主芯片缓存寄存器里一直没有数据。[/quote]那你的驱动程序对么?spi我记得要第二次读的数据才是对的。

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧