at91sam9263芯片资源与CAN驱动调试心得
确度上,但是一般情况下没有那么精准的测试仪器,所以搞的大家一头雾水。适当调整SJW 同步跳转宽度的大小,可以一定程度的解决这个问题,但是不是最佳的解决方案。虽然现象上看到,哦,通信正常了,我发的包对方可以收到,对方发的数据包我也可以收到,但是,事实是,这里面有了多次的重发,得益于CAN协议,重发,应答等等。
下面简单描述下CAN波特率的分析
比如说500K波特率,一个比特被分为16个时间因子
500K * 16 = 8M
所以CAN时钟应该尽量使8M的倍数。误差尽量小。
同理推算其他波特率跟时钟的对应关系。
在我们的9263应用中,MCLK = PLLA/2,CAN时钟从MCLK分频而来。
所以PLLA的取值应为16M的整数倍。我们的PLLA一般设置再200M---150M,所以PLLA可取192M 176M 160M等。
WinCE下设置就比较简单了,Eboot启动后,空格可以进入eboot配置菜单,可以直接设置CPU的主频 跟 分频,不赘述。
裸奔的程序 则需要自己去设置倍频跟分频系数,从ATMEL官网下载了PLL计算工具,帮了不上忙,可能没有那么精准,但是尽量接近就好。
#define BOARD_MCK ((16367660 * 98 / 10) / 2) /*160M*/
如上设置为160M的设置
除了这个宏定义的修改以为,在board_lowlevel.c中也需要做一些修改,
#define BOARD_MULA (AT91C_CKGR_MULA & (97 《《 16))
#define BOARD_divA (AT91C_CKGR_divA & 10)
就是那两个系数,注意分频系数不变,但是倍频系数减一了,原因看数据手册就明白。
原来以为这样就可以了,可是还有一个地方忽略了,看代码
void LowLevelInit( void )函数中
void LowLevelInit( void )
{
……。
#if !defined(sdram)
/* Initialize main oscillator
初始化主振荡器,时钟等一系列操作
#endif //#if !defined(sdram)
。。。。。。。。。。。
}
整个过程包含在了对sdram宏的判断内,如果定义了sdram则不做下面的处理,乖乖,你不做这个处理怎么可以呢,遂注释掉上面两个宏定义。
这个宏定义不是在文件中定义的,而是在编译器的工程设置里面,
Options-àC/C++ Compiler Preprocessor选项卡,最下面 Defined symbols
也可以直接把sdram去掉。
一直在纠结SDRAM的初始化是在什么地方进行的?
调试心得之关于SPI启动的问题
到底是什么问题呢:SPI DATA FLASH本身的质量有问题造成的。
反映的现象是:从SPI DATAFLASH的0地址读取数据是没有任何问题的,但是如果从中间任何一段读取数据,就有严重的地址偏移问题。
调试过程及步骤如下:
原来认为是CPU(AT91SAM9263有A版本和B版本)版本有问题,造成无法读取FLASH造成,反馈的现象是:
当DATA FLASH启动后,会将第一段代码EBOOT.nb0,存放于DATA FLASH的0X5000偏移地址,加载后,会进行WINCE的引导。
但是实际结果是:
================================= 》RomBOOT 》RomBOOT 》RomBOOT 》
INFO: Low Level Init: OK Starting main… AT45DB321 …
Load CE-BOOT from Flash to SDRAM Jumping… -
==================================
从现象上看,DATA FLASH已经找到了,也就说明SPI线路是正确的,但是为什么读的数据有问题呢?
怀疑问题有如下几个:
第一:DATA FLASH的SPI本身硬件有问题,可能存在干扰。
第二:在从DATA FLASH拷贝数据到SDRAM中,出现错误,数据不正确,SDRAM初始化有问题。 第三:因我们的SPI线路和以前的版本不同,采用了MAX3002进行了隔开,怀疑MAX3002本身造成SPI线路的 不稳定。
第四:CPU版本有问题,AT91SAM9263从A到B版本,SPI已经改过了,就我知道的是AT91SASM9263 B版本的SPI,需要两次复位才可以工作。
一个一个怀疑的问题进行验证:
一:SAM BA 2.8可以对SDRAM进行初始化,都可以进行读写,说明SDRAM本身硬件上无问题。
第二:DATA FLASH ,SAMBA 2.8都可以进行读写,也无任何问题,同时启动代码可以正确执行。那么就应该可以证明SPI部分是能够工作的,但是问题在于AT91SAM9263 B版本内部的ROM BOOT和AT91SAM9263 A版本的ROM BOOT有不同,那么就证明说:在SPI这个部分的初始化部分做了修正。所以,找到AT91SAM9263 B版本的SPI部分的ERR DATA SHEET。找问题。改了半天代码,问题还是依旧。
第三:实在没有办法了,2008年11月18日,找到百特的雷工,初步认定是CPU版本的问题,我自己认为自己的代码水平比较落后,请求雷工帮忙,最后
CAN调试 AT91SAM9263 Atmel 相关文章:
- Atmel针对工业机器视觉应用推出快速CMOS相机(10-22)
- 汽车触控引潮流 触控双雄解决方案集锦(05-06)
- Atmel智能电表解决方案(03-14)
- 智能家电应用特点及解决方案集锦(02-16)
- Atmel高效智能家用电器解决方案(02-12)
- 基于Atmel、TI、Toshiba等产品的低功耗蓝牙智能可穿戴方案(06-09)