求助,拿到一个新芯片,SPI通信的,一直配置不对,请问需要注意什么?SPI地址没有理解

2019-07-21 05:09发布

手里买了个新的通信芯片,是SPI接口的。以前用过的SPI只有flash,便参照了一下。
有几个问题:
1、新芯片手册里有几个寄存器,寄存器地址为2个字节,我像写flash一样,“发写指令”、“发flash地址”、“发写入的内容”、“读flash数据”,这一套下来可以正常对寄存器进行读写。。。但例如写数据、读模块状态、配置模块频段等指令,但没有对应的寄存器地址,而是给了一个字节的opcode,与前面所说的 “发写指令” 所用的也是opcode。那也就是说这些配置指令都没有“地址”是吗?没有寄存器地址它是如何写入配置的呢?
2、假设就是没有地址,那只需要发一个opcode给芯片,比如gainstatu的操作码是0x81,我将它直接发给芯片后,再想去取它返回的状态值,并没法取到。现在所有取寄存器(有地址)的操作我都已经成功了,所有配置和读配置(只有opcode,没有地址)的操作我都没成功,获取不到想要的数据。请问都有什么原因呢?

3、下面是两段代码,请问后面一段为啥无法进行配置呢?那不带地址又该怎么码这代码呢?说说思路就行
这段是有地址的写数据:(这段代码可以正常写入寄存器,已测试过)
SPI_FLASH_CS_LOW();       
hw_flash_read_write_byte(0x0D);         /* 写命令的opcode        */                                          
hw_flash_read_write_byte((((Dst+i) & 0xFFFF) >> 8));   /* 2个字节的寄存器地址 */
hw_flash_read_write_byte((Dst+i) & 0xFF);
hw_flash_read_write_byte(SndbufPt[i]);        /* ·写入寄存器的内容        */                       
SPI_FLASH_CS_HIGH();       


这段是没有地址,只有opcode的写数据:(这段代码无法成功配置,已测试过)
SPI_FLASH_CS_LOW();       
hw_flash_read_write_byte(0x8F);         /* 配置缓存区        */                                          
hw_flash_read_write_byte(01);   /* 配置缓存区发指针 */
hw_flash_read_write_byte(01);        /* 配置缓存区收指针  */       
hw_flash_read_write_byte(10);        /* 配置缓存区大小  */       
SPI_FLASH_CS_HIGH();       





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
15937417823
1楼-- · 2019-07-21 06:27
手册上如果没有明确注明,那应该就是直接写opcode就可以了,我用的一个SPI模块也是分寄存器配置跟直接命令控制,寄存器配置的时候也是先写地址,直接命令时候就是直接写进去命令码。
yuzeyuan1
2楼-- · 2019-07-21 11:12
不是第一次使用SPI,但是这个片子没有例程,英文手册能看懂,但是肯定细节上没整对,我自己也不太懂SPI的原理。现在这问题不知从何下手,求帮解释解释SPI咋工作的,为啥可以没有地址,为啥我发了数据得不到返回值
另外,补充一下上面的。
读返回值Temp1是这么写的,同样是有地址的就可以成功,没地址的就读出来个a2,不知道a2是啥,手册里也没有解释,读到的所有数据都是a2,所以估计是个错误数据
        SPI_FLASH_CS_LOW();
        hw_flash_read_write_byte(0x13);
        for(i = 0;i < 2;i++)
        {
                Temp1[i]|=hw_flash_read_write_byte(0xFF);
        }
        SPI_FLASH_CS_HIGH();
沧海
3楼-- · 2019-07-21 15:18
你确定硬件没问题? SPI需要上拉电阻的。
yuzeyuan1
4楼-- · 2019-07-21 15:35
沧海 发表于 2019-2-15 08:50
你确定硬件没问题? SPI需要上拉电阻的。

硬件上没问题,毕竟有寄存器地址的指令我都成功了,只是有些配置没有这种地址,我不知道为啥它同样是配置指令,一部分有地址,一部分没地址
oyixi001
5楼-- · 2019-07-21 19:05
 精彩回答 2  元偷偷看……
yuzeyuan1
6楼-- · 2019-07-21 20:47
oyixi001 发表于 2019-2-15 09:20
SPI这个东西嘛,就是主机出一个时钟,然后在上或下沿发送或读取数据。然后这个地址是怎么回事呢,就是这个S ...

这个芯片里确实有十来个寄存器有地址,每个地址是2字节。比如读取模块IP地址号。这个已经按你上面说的读写成功了。时序我抓了一下,是对的了。

但是比如获取设备通信状态、配置和获取设备缓存区指令等,这一部分指令并没有寄存器地址。而是单单给了1个字节的opcode。
以前用W25Q25 flash芯片时, 有一个配置4字节地址模式的指令,就是单独向SPI里写一个字节,也是没有“地址”。所以我照着它,也向模块写了一个字节,但是并不能获取到返回数据,就算我确实获取到了aa  a2  等数据,但是我并不知道这个数据是个啥玩意,手册里也没有说,实际的数据应该也不是aa  a2

一周热门 更多>