对于AT91SAM9260的bootloader的烧写,常常会遇到这样的问题:对于干净的NAND FLASH(即没有烧写过任何东西),AT91SAM9260与sam-ba很容易连接成功,但当烧写过bootloader(包括Bootstrap)后,则怎么也连接不上sam-ba了。
对于这个问题,我们先来了解下AT91SAM9260与sam-ba的连接原理,不管任何问题,先弄清原理对于解决问题都是必要的。
对于连接原理,且看从网络中搜索到的答案,如下所述:
AT91SAM9260与SAM-BA的连接是由于芯片内有一段固化的代码运行起来后才会检测到目标板并建立连接。
假设现在你烧写了Bootstrap进去,芯片上电后发现有可运行的代码,从而就不执行片内固化的那个代码。因此,就无法与SAM-BA建立连接。解决方法主要有以下几个方面:
1. 在开发板上已经预留了处理这个问题的硬件,即有个按钮,一旦这个按钮按下,测清除flash中的所有代码,以便让芯片上电后执行其片内固化的代码。当然,这个要bootstrap里面软件的支持,就是bootstrap检测按钮是否按下,若按下则清除。这样,芯片上电检测不到有效的、可执行的代码就会执行片内固化的部分。问题就解决了……^_^
2. 还有一个比较不专业的办法,但很行至有效。我的开发板没有设计按钮,也没有在bootstrap中设计清除代码。但我这里有一招就是短接nand flash(我板子上没有nor flash和data flash)的地址线,大概是42脚左右的位置都行。这样做的目的就是让芯片不能正确的将nand flash中的代码正确搬运到sdram中,因此芯片内的固化代码依然会执行。这就解决了和SAM-BA不能连接的问题。O(∩_∩)O哈哈~
3. 因为我的板子上没有nor flash和data flash,因此只是根据nand flash的方法处理。其它flash按照类似的方法,只要让代码不能正确启动就可以了。祝大家好运……^_^ 。
弄清了原理,这个问题,就不难解决了,我的板也一样,没有跳针,但我没用上述搜索到的方法,而是通过短接SDRAM的第7和第8引脚来解决的,具体如下所述:
1. 断开系统电源;
2. 用镊子短接SDRAM的第7和第8引脚,不松开;
3. 系统上电,等待4到5秒后,松开镊子,就可以连接成功,重新在sam-ba找到对应的串口。