2227|10

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

标准库SPI读写寄存器驱动,求助,嵌入小白入门不到一个月 [复制链接]

  刚刚开始学单片机,这个礼拜学习了SPI通信,需要根据芯片手册进行简单的读写寄存器操作,并测试是否正确,求大佬指导。

  我处于很蒙的状态,有源码的话就更好了,这是我的入门项目,我想弄得清楚一些,感谢各位大佬。

SPI都是用的标准库,我在网上看了很多关于SPI读写WQ25Qx的内容,但我可能太笨了,还不知道具体的要怎么移植到我的这个寄存器驱动里,感谢!!!!!

寄存器及SPI时序.docx

471.5 KB, 下载次数: 2

芯片手册

此帖出自ARM技术论坛

最新回复

感觉你这个就是普通的SPI通讯,没有什么特殊的,搞个示波器或者逻辑分析仪,看时序容易懂。   详情 回复 发表于 2023-2-6 09:57
点赞 关注
 

回复
举报

6873

帖子

11

TA的资源

版主

沙发
 
建议你买一块开发板,他们会附带教程的。然后你跟着例程写一篇,然后自己再写一篇。先用摸拟的写一篇,再用硬件spi写一篇。这就差不多了。
此帖出自ARM技术论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
lugl4313820 发表于 2023-2-4 08:09 建议你买一块开发板,他们会附带教程的。然后你跟着例程写一篇,然后自己再写一篇。先用摸拟的写一篇,再用 ...

您好,我现在在用st的开发板上午看了读写寄存器的内容,明白了我要做的内容,是读写另一个芯片上的9个寄存器,有三个收发通道,通过16位进行读取。0-9可读,0-1-3寄存器可写,标准spi时序,指令+地址+内容。


我是这样做的,不知道对不对。


还有我想知道逻辑层的调用函数应该怎么写呢?(当我选择不同的通道时,返回16位的读取内容。)


还有验证读写是否一致打印函数,应该要怎么去实现呢?


很抱歉有些打扰,因为我C语言刚入门,嵌入式也是刚开始,有些地方很迷惑,没有形成流畅的思维吧。



//指令集 


#define ACPL_Read 0x09 //读取寄存器指令码 


#define ACPL_Write 0x0A //写入寄存器指令码


 typedef enum


 {addr_Filter_Setting = 0x00


 addr_Channel_Select = 0x01 


addr_Interrupt_Status = 0x02 addr_Interrupt_Enable = 0x03 


addr_Channel1_MSB = 0x04 


addr_Channel1_LSB = 0x05


 addr_Channel2_MSB = 0x06 


addr_Channel2_LSB = 0x07 


addr_Channel3_MSB = 0x08 


addr_Channel3_LSB = 0x09


 }ACPL_RegisterAddr;



/*********************************************


 * 读取寄存器,0-9可读


 * BIT 7 6 5 4 3 2 1 0


 *********************************************/


u8 ACPL_Read_Value(u8 ACPL_RegisterAddr)


{


  u16 temp = 0;


  SPI_FlASH_CS_LOW();                                           //使能片选信号,开始操作 


  SPI5_ReadWriteByte(ACPL_Read|ACPL_RegisterAddr);             //写入cmd+地址


  temp|=SPI5_ReadWriteByte(0Xff);  


  temp<<=8;


  temp|=SPI5_ReadWriteByte(0Xff);                                //读两次,合并16位


  SPI_FLASH_CS_HIGH();  


  return temp; 


}




/*********************************************


 * 写入寄存器,只有三个寄存器是可写的————寄存器0,1,3


 * BIT 7 6 5 4 3 2 1 0


 *********************************************/


_Write_Filter_Setting(u8 ACPL_RegisterAddr,u8 value)


{


  SPI_FLASH_CS_LOW();                              


SPI5_ReadWriteByte(ACPL_Write|ACPL_RegisterAddr);             //SPI写地址命令-寄存器0


SPI5_ReadWriteByte(value);                                   //SPI写数据


SPI_FLASH_CS_HIGH();                          


}


此帖出自ARM技术论坛
 
 
 

回复

6247

帖子

9

TA的资源

版主

4
 

你这个芯片寄存器长度是十六位的?看了也是8位的,SPI的时序没有要求复杂,建议先用模拟来进行一下时序学习

此帖出自ARM技术论坛

点评

这个器件的寄存器是8位的,但是要通过3个通道进行传递数据,我看了一下,通道的读取是16位的,我就很迷惑这个要怎么操作。我的思路是,这个驱动应该,先写内部的 读寄存器函数,写寄存器函数,然后把他们传递到  详情 回复 发表于 2023-2-4 15:41
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 
秦天qintian0303 发表于 2023-2-4 15:33 你这个芯片寄存器长度是十六位的?看了也是8位的,SPI的时序没有要求复杂,建议先用模拟来进行一下时序学习 ...

这个器件的寄存器是8位的,但是要通过3个通道进行传递数据,我看了一下,通道的读取是16位的,我就很迷惑这个要怎么操作。


我的思路是,这个驱动应该,先写内部的 读寄存器函数,写寄存器函数,然后把他们传递到驱动外部接口函数调用。在这个函数里进行读取寄存器和读写是否一致,打印出来判断测试是否成功。


现在就是不知道代码上应该怎么实现,我也很迷惑。


此帖出自ARM技术论坛
 
 
 

回复

6247

帖子

9

TA的资源

版主

6
 

一般不是都有一个寄存器存ID,判断通信是否成功习惯读这个寄存器,对了通了

此帖出自ARM技术论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

6247

帖子

9

TA的资源

版主

7
 

通道的读取是16位,不也是存在了两个寄存器了吗?对于SPI都是一个一个寄存器读的,当然也不排除有的支持连续读和连续写,这样就可以把相邻的两个或多个寄存器读出来

此帖出自ARM技术论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

6247

帖子

9

TA的资源

版主

8
 

你现在就先看路通信是否成功,所谓的通道的16位可以,读出来两个后返回一个16位数

此帖出自ARM技术论坛

点评

多谢大哥,我又理解了一点。它这个是个数字滤波器的功能,没有ID寄存器,也没有状态寄存器,有10个寄存器,其中前三个存储滤波和中断,后六个分别存放通道1-3的高低字节,都是八位。我想它应该是分三种模式,普通的  详情 回复 发表于 2023-2-4 16:10
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

9
 
秦天qintian0303 发表于 2023-2-4 15:48 你现在就先看路通信是否成功,所谓的通道的16位可以,读出来两个后返回一个16位数

多谢大哥,我又理解了一点。它这个是个数字滤波器的功能,没有ID寄存器,也没有状态寄存器,有10个寄存器,其中前三个存储滤波和中断,后六个分别存放通道1-3的高低字节,都是八位。


我想它应该是分三种模式,普通的一个一个读寄存器, 普通的写寄存器, 和读取滤波寄存器(这种模式似乎是要多个寄存器一起读的,通过设置选用1通道 2通道或者三个通道一起读)。


我现在知道大概要做什么了,就是不知道这个具体要如何实现,可能基础太薄弱了,感觉脑袋逻辑不清晰。同事都是男同事,我可能也太腼腆了,总不会觉得不太好意思。问了几次总感觉不清楚,我就开始自己琢磨了,又琢磨不清楚。


多谢诸位大哥答疑解惑啦


我会持续更新疑惑的,这是我第一个小任务,一定要完成好。


此帖出自ARM技术论坛

点评

还有呀,我建议你找个逻辑分析仪,看一下读出来的时序。还有spi跟从机通讯是还有时钟相位跟时钟极性(也就是采样时间点)两个协议要一样才行。 建议你看一下时序图,用逻辑分析仪,有时候是时序不对。  详情 回复 发表于 2023-2-4 19:29
 
 
 

回复

6873

帖子

11

TA的资源

版主

10
 
嵌入小白很发愁 发表于 2023-2-4 16:10 多谢大哥,我又理解了一点。它这个是个数字滤波器的功能,没有ID寄存器,也没有状态寄存器,有10个寄存器 ...

还有呀,我建议你找个逻辑分析仪,看一下读出来的时序。还有spi跟从机通讯是还有时钟相位跟时钟极性(也就是采样时间点)两个协议要一样才行。

建议你看一下时序图,用逻辑分析仪,有时候是时序不对。

此帖出自ARM技术论坛
 
 
 

回复

6938

帖子

2

TA的资源

版主

11
 

感觉你这个就是普通的SPI通讯,没有什么特殊的,搞个示波器或者逻辑分析仪,看时序容易懂。

此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表