手里买了个新的通信芯片,是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();
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这样奥,我有个问题,它手册上有一条是这样的:
命令名:SetBufferBaseAddress 指令码:0x8F 参数:TxbaseAddr, RxbaseAddr
意思是这个一个设置缓存区基地址的指令,指令码是8F,其中有两个配置参数,一个是发送基地址,另一个是接收基地址。
这样的话我应该怎么写呢?(假设基地址都写0x02)
是这样吗?
SPI_FLASH_CS_LOW();
hw_flash_read_write_byte(0x8F);
hw_flash_read_write_byte(0x02);
hw_flash_read_write_byte(0x02);
SPI_FLASH_CS_HIGH();
兄弟,我上面写的帮我看一下呗
我那个是直接命令,不需要在设置参数。你这样试一下
一周热门 更多>