如何检测确认RP2040板载SPI FlashRAM的真实大小?
<p>我们知道,RP2040板载SPI FlashRAM最高支持16MByte(128Mbit)。那么,我们怎么能知道一块RP2040板载SPI FlashRAM的真实大小?</p><p>1、器件型号被擦除,直接看不出来。</p>
<p>2、不想把SPI FlashRAM 从板子上焊下来用编程器读。</p>
<p>3、我试过插入PC,在U盘的形式下写入大于18MByte文件,关闭文件夹后再重新打开(不拔插RP2040板),这个大于18MByte文件是正常可读的。但如果弹出U盘后,再重新插入PC,进入U盘的形式,这个文件消失了。我估计实际上并没写入U盘,而是存在缓存中。所以这个方法检测RP2040板载SPI FlashRAM的真实大小行不通。</p>
<p> </p>
<p>看看哪位网友有好办法能比较容易的查看RP2040板载SPI FlashRAM的真实大小。</p>
<p>如果是再UF2 bootloader下,写入文件实际是更新程序。如果文件格式不对将不会更新,你读取的文件实际是计算机缓存的。</p>
<p> </p>
<p>如果用micropython,可以通过下面方法查看flash和ram大小(这个方法是通用的,大部分micropythhon版本都支持,但是要注意系统会占用一部分空间,因此实际数值比真实物理大小要小):</p>
<p> </p>
<p>先进入REPL,输入下面指令:</p>
<p> </p>
<p><strong>flash</strong></p>
<p> </p>
<p>import os</p>
<p>d = os.statvfs('/flash')</p>
<p># 文件大小</p>
<p>d*d</p>
<p># 剩余空间大小</p>
<p>d*d</p>
<p> </p>
<p><strong>ram</strong></p>
<p>import gc</p>
<p>gc.mem_free()+gc.mem_alloc()</p>
<p>多谢!d*d的单位是什么?Byte?</p>
<p>另外,这个查得是板载SPI Flash的大小吗?</p>
dcexpert 发表于 2023-1-1 14:13
如果是再UF2 bootloader下,写入文件实际是更新程序。如果文件格式不对将不会更新,你读取的文件实际是计算 ...
<p>d*d这个查得的大小,是SPI Flash真实的大小还是代码里配置的大小?</p>
dcexpert 发表于 2023-1-1 14:13
如果是再UF2 bootloader下,写入文件实际是更新程序。如果文件格式不对将不会更新,你读取的文件实际是计算 ...
<p>我认为这个大小是代码编译固件时选择的SPI Flash的大小。并不是真实SPI Flash的大小。</p>
<p>那么问题来了:在MicroPython的世界里,它是怎么管理SPI Flash空间的。我可以读写指定物理地址的空间吗?</p>
<div class='shownolgin' data-isdigest='no'>yang_alex 发表于 2023-1-1 22:28
<p>的确是编译时设置的参数,然后可以通过一定方式读取。</p>
<p> </p>
<p>micropython中一般不会直接读取物理地址空间,而是通过文件方式,直接创建、写入、读取文件,比扇区简单多了。不过写入文件需要特别小心,因为flash写入速度是比较慢的,如果存在大量写入,容易和其它功能冲突造成一些问题。</p>
</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]