您好:
在尝试写EEPROM的过程中,发现部分寄存器不能生效,掉电配置还会丢失,求解?
以下是具体遇到的问题:
a.在以下操作描述的第5步到第6步之间轮询读取寄存器,发现与原先写入的寄存器值不相匹配,具体如下:R10,R11,R13,R14,R72,R123,R124,R125,R126,R127,R128,R155,R156,R161,R162,R357,R367
b.接着上一个问题,去掉R12和R162两个寄存器其他的回读发现只有R10、R11两个寄存器还是没写对?(目标值:R10=0x80,R11=0x30)
c.掉电后,问题a提到的寄存器配置都没有生效?
操作步骤如下(I2C读写只用了Write Transfer 和Read Transfer两种操作):
1.用code loader生成register值,通过i2c写入register。
– Mask R12 = A7h
– Mask R157 = FFh
– Mask R164 = FFh
Mask部分的位都写入0。
2.R12[7]写1,其他位根据code loader内决定。
3.R12[7]写0,其他位根据code loader内决定。
4.R157写0x40 。
5.等待 R157 self-clearing (几乎不需要等待)。
6.R164写0xEA。
7.R157写0x3。
8.等待300ms。
9.Read or poll R157[2],When this bit cleared, the EEPROM programming is done.
10.R164写0x0。
谢谢!
Kailyn Chen:
第五步等待 R157 self-clearing, 当R157[2] (NVMBUSY bit)清零之后,说明EEPROM 配置完成,然后将R164写0X0,说明EEPROM 已经lock。 此时再读寄存器的值呢? lock之后再掉电重启值应该就不会改变了。
yun yu:
回复 Kailyn Chen:
Hi Kailyn Chen:
1.此时再读寄存器的值发现与写入的不一样,具体情况如下图:
寄存器地址(x16) 写入的值(x16) 读出的值(x16)
0xa 0x80 0x8
0xb 0x30 0xb
0xd 0x00 0x1d
0xe 0x00 0xd0
0x48 0x3e 0x1
0x7b 0x6a 0x0
0x7c 0xaa 0x0
0x7d 0xa9 0x0
0x7e 0x97 0x0
0x7f 0x36 0x0
0x80 0x00 0x1
0x9b 0xd1 0x8d
0x9c 0x08 0x56
0xa1 0x16 0x8d
0xa2 0x4f 0x28
0x165 0x28 0x20
0x16f 0x28 0x0
2.我们具体的硬件配置如
QFN48(7×7):
pin name
pin num备注
VDD_IN
pin5
通过0.1uf电容接地,输入3.3VVDD_XO
pin33VDD_PLL1
pin27VDD_PLL2
pin36VDD_DIG
pin4LF1
pin29
通过0.47uf电容接地LF2
pin34
通过0.1uf电容接地CAP_PLL1
pin28
通过10uf电容接地CAP_PLL2
pin35
通过10uf电容接地CAP_DIG
pin3
通过10uf电容接地SCS
pin24
接地SYNCN
pin12通过0.1uf电容接地,输入3.3V
HW_SW_CTRL
pin9
接地PDN
pin13
IO输入SDA
pin25IO输入,上拉4.7k到VDD_IN
SCL
pin26IO输入,上拉4.7k到VDD_IN
GND
pin49(底部中间)接地