热度 1|
注意的是:SPI通信为8bit MSB 方式,读芯片时地址最高位为1,写芯片则为0
如上的波形反复出现,表示的意思是:向地址寄存器0x01写入数据0x8D,并马上读取地址0x02(0x82,高位为1,即0x02寄存器所对应的读地址)的数据,获得二进制数据00100100即0x24
继续观察波形文件,上述的数据反复出现多次:
每次波形之间的时间比较固定,间隔可以利用工具测量出来。因为时间固定,可以推断代码定时执行。
图
片信息解读:程序在循环执行(写寄存器0x01-读寄存器0x02)的动作,其中读写动作是在一个循环体内部顺序执行的(所以时间上是连贯的)。时间间隔
大约为400us,这个时间很短,操作系统是不能提供这么小而精密的时间间隔。所以,这个循环动作是放在一个硬件定时器的ISR完成的。
为什么一直在执行这个循环呢?那它一定是等待一个可以改变程序流程的条件。
而这个条件一定与读取寄存器0x02所获得的数据有关键的关系(结合数据手册分析),因此接下来应当仔细寻找数据跳变的波形。
上图可以看出:寄存器0x02的数据出现01011100(b)时,紧跟的动作时向寄存器0x03写入0x00
而0x02之前的数据为01010100(b),即bit3置位时程序流程会改变。因此bit3是条件语句执行的一个条件
程序应该有类似
if(read(0x02)&0x08)
{
xxxx
}
的语句片段
接下来波形
反复出现,说明程序在等待寄存器0x03和0x02的数据。
果然,出现如下波形
从寄存器0x03(读到数据00000101(b))和寄存器0x02分别读到了数据, 并且立即对寄存器0x3写入操作。
而这部分的写入,厂家提供的datasheet没有非常详细的说明,示例代码也没有这样操作!
由此可以在自己平台上做对应的修改了。
后续的步骤按照类似的方式进行。