CH546读芯片唯一ID号会变化

        在项目程序中直接调用官方例程的FlashReadOTPword函数读取0x10地址的值得到ID号,并发送到电脑串口观察数值,多次上电接收到的数值都是一样的,排除是串口的问题。只要我修改了项目程序中其他与读ID号毫不相关的功能后,读出的ID号就跟之前不一样了,将程序改回去后,读出的ID号又和之前一样了。

        我还另写了一个单独测试ID号的程序,但测试程序修改其他与读ID号不相关的功能并不会改变读出的ID值。而且在先烧录项目程序再烧录测试程序的情况下,测试程序读出的是ID值和项目程序的一样,也就是说项目程序读出的ID号变化测试程序读出的ID号也变。但一直烧测试程序读出的ID号是不会变的。

        请问这是什么问题呢?另外测试程序编译后大小为1K左右,项目程序编译后大小为23K左右。

你程序RAM用了多少了?是不是RAM使用太多,导致堆栈出问题,读出来的值被程序修改了。


image.png

    就用了一百多而已,应该不是堆栈的问题。因为烧测试程序和项目程序读出来的值是一样的,感觉是程序没有读到ID号存放的地址而是读了程序存储区的地址。

    如果是堆栈问题,那测试程序应该能读出真正的ID号。


你说修改了某一块 程序后就会导致读出的ID号发生变化,修改回去后就好了,请问这个修改的程序是哪一块程序?修改前后对RAM使用大小有造成影响吗?


    不是说改回去就好了,是程序一样的话读出的ID号就一样,不能确定读出的是真的ID号。

    修改的是跟读ID号无关的功能,对RAM的使用没有影响,比如说这个版本读一次ID号,另一个版本连读两次ID号,两个版本的程序得到的ID号都是不一样的。如下图:

image.png


是不是读flash的地址不对?


这个问题已经解决了,读16位地址就出错,读8位地址就是正确的。


只有登录才能回复,可以选择微信账号登录