首页>>科技 >>内容

at91sam9263芯片资源及CAN驱动调试经验

发布时间:2023-12-02 16:50:14编辑:温柔的背包来源:

at91sam9263芯片资源及CAN驱动调试经验

很多朋友对at91sam9263芯片资源及CAN驱动调试经验不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

at91sam9263嵌入了一个200 MIPS(每秒百万条指令)的ARM926EJ-S微控制器(MCU),从而解决了图形界面、数据密集型应用(例如网络医疗监控设备和GPS导航系统)的问题。基于ARM9的传统微控制器遇到的瓶颈问题。

at91sam9263使用27个DMA(直接内存访问)通道,包括Atmel的18通道PDC(外设直接内存访问控制器)、9层总线矩阵以及用于数据/指令的TCM(紧耦合内存)以及两条额外总线以增强CPU性能并提供高达41.6 Gbps 的片上数据传输速率。两个EBI(外部总线接口)支持超过1 GB 的外部存储器。

人机接口。片上人机接口外设包括摄像头接口、TFT/STN LCD 控制器、6 通道音频前端接口(AC97)、I2S 和2D 图形协处理器,可减轻CPU 的线条绘制和块传输、多边形填充的负担和裁剪功能负担。

网络和通信。网络外设包括12Mbps USB 主机和设备、10/100 以太网MAC(以太网媒体访问控制器)和1 Mbps CAN(控制器局域网)。还有四个USART(通用同步/异步接收器/发送器)、两个50 Mbps SPI(同步并行接口)、CompactFlash、SDIO (MCI) 和一个TWI(两线接口),可连接到GPRS 调制解调器,例如和Wi -有线和无线通信模块上的Fi。

外设的DMA 控制器无需使用CPU—— 即可实现从外设设备到内存的数据传输。传统的基于ARM9的处理器通过发出加载-存储指令(至少需要80个CPU周期)来实现内存和外围设备之间的一字节数据。传播。这些处理器以200 MHz(100 MHz 总线频率)运行,即使内存管理单元和指令/数据缓存控制器都已激活,它们通常也会在传输速度达到约20 Mbps 时达到其功能极限。

Atmel 的at91sam9263 集成了18 个简单、硅高效、单周期外设PDC、5 个DMA 控制器(支持USB 主机的突发模式)、以太网MAC、摄像头接口、LCD 控制器、2D 图形控制器和内存到内存DMA控制器(支持突发模式、分散-聚集和链表)。 DMA控制器完全减轻了外部串口和内存之间数据传输的负担。当传输速度为20 Mbps时,Atmel的SAM9263仍有88%的MIPS可用于应用程序执行。

11 层总线和96 KB 片上SRAM(静态存储器)消除了带宽瓶颈。 Atmel 在AT92SAM9263 上配置了11 条总线和96 KB 片上临时存储SRAM。 SRAM 可以部分配置为紧密耦合的数据和指令存储器。这些总线提供多个并行片上传输通道和总共41.6 Gbps 的片上带宽。

两个EBI 使ARM9 CPU 和图形处理器能够同时并行工作。 at91sam9263有两个EBI:一个是系统内存接口,另一个是人机接口。第二个接口消除了LCD 控制器和CPU 共享内存的需要,同时将可用CPU MIPS 提高了20% 至40%。

【at91sam9263芯片资源】

1、集成ARM926EJ-STM ARM THUMB的处理器

-DSP指令扩展,JAVA加速处理器的JAZELLE技术

-16K字节缓存、16K字节指令缓存、写缓冲区

-220MIPS(220MHZ)

-内存管理单元

-EmbededICETM,调试通信通道支持

-中型执行嵌入式宏单元结构

2、总线矩阵

-9个32位层矩阵允许总片上总线带宽为28.8Gbps

- 启动模式选项、映像命令

3、嵌入式存储器

-128K 字节内部ROM,用于以最大总线矩阵速度进行单周期访问

- 80K 字节内部SRAM,用于以最大处理器速度或最大总线矩阵速度进行单周期访问

- 16K 字节内部SRAM,用于以最大总线矩阵速度进行单周期访问

4、 双外部总线接口(EBI0-EBI1)

-EBI0 支持SDRAM、静态存储器、启用ECC Nand Flash 和紧凑型Flash。

-EBI1支持SDRAM、静态存储器和启用的ECC Nand Flash。

5、DMA控制器

- 充当总线矩阵主机

- 嵌入两个单向通道,这两个通道具有编程优先级、地址生成、通道缓冲和控制。

6、20 外设DMA 控制器通道

7、液晶控制器

- 支持主动或被动显示

- 在TFT 模式下,每个像素最多可以有24 位,在STN 彩色模式下,每个像素最多可以有16 位。

- TFT模式下,最大颜色可达16M,分辨率可达2048X2048,支持虚拟屏缓存。

8、2D图形加速器

- 线拖动、块传输、多边形填充、剪切、命令排队。

9、 摄像头传感器接口

-ITU-R BT.601/656外部接口,可编程帧捕获率。

-12bit接口,可支持高灵敏度传感器。

-SAV 和EAV 同步,带缩放器的预览路径,YcbCr 格式。

l0、USB2.0全速(12Mbit/sec)主机双端口

-双片上收发器

-集成FIFO 和专用DMA 通道。

l1、USB2.0全速(12Mbit/秒)设备端口

-片上收发器、2,432 字节可配置集成DPRAM。

l 2、10/100 Base-T以太网MAC

-独立媒体接口或简化的独立媒体接口。

- 具有28 字节FIFO 和用于接收和发送的专用DMA 通道。

l3、 具有所有功能的系统控制器,包括

- 重置控制器,停止控制器。

-20个32位电池备份寄存器,共80字节。

-时钟发生器和电源管理控制器。

先进的中断控制器和调试单元。

周期定时器、看门狗定时器和双实时定时器。

1)复位控制器(RSTC)

-基于两个上电复位单元,复位源识别和复位输出控制。

2)停止控制器(SHDWC)

- 可编程引脚控制和唤醒电路。

3)时钟发生器(CKGR)

-32768Hz低功耗振荡器用于备用电源,提供永久的低速时钟。

-3-20MHz 片上振荡器,两个高达240MHz 的PLL。

4)电源管理控制器(PMC)

-较低的时钟工作模式,软件可编程电源以优化容量。

-4 个可编程外部时钟信号。

5) 高级中断控制器(AIC)

-可独立屏蔽、8级优先级、矢量中断源。

- 2个外部中断源和1个快速中断源,杂散中断保护。

6)调试单元(DBGU)

-2线UART并支持调试通信通道、可编程ICE访问阻塞。

7) 周期性间隔定时器(PIT)

-20位间隔定时器加12位间隔计数器。

8)看门狗定时器(WDT)

- 加密保护,仅一次性编程,窗口16位计数器在低时钟下运行

9)两个实时定时器(RTT)

- 具有在低时钟下运行的16 位预分频器的免费备份计数器

l4、5 32位并行输入/输出控制器(PIOA、PIOB、PIOC、PIOD和PIOE)

-160条可编程I/O线同时传输至外部设备2个I/O

-各I/O线的信号输入、变化、中断性能

- 可单独编程的开漏输出、上拉电阻和同步输出

-16 个完全可编程的消息目标邮箱、时间戳计数器

l5、 两个多媒体接口卡(MCI)

SD 卡/SDIO 和MultiMediaCard 驱动程序

使用PDC 进行自动协议控制和快速自动数据传输

每个控制器配有两个SD 卡插槽

l6、 两个同步串行控制器(SSC)

每个接收器和转换器都有独立的时钟和帧同步信号

I2S模拟接口支持,分时同步传输支持

32 位数据转换器的高速连续数据流性能

l7、 AC97控制器(AC97C)

6通道信号AC97模拟前端接口,插槽分配

l8、3 通用同步和异步接收器-发送器(USART)

独立波特率发生器、IrDA红外调制解调、曼彻斯特编解码

支持ISO7816 T0/T1智能卡、硬件握手信号、RS485支持

l9、 两个主从串行总线接口(SPI)

8至16位可编程数据长度,4种外部总线芯片选择

每秒90Mbits 的同步通信

20. 一个3通道16位定时器和计数器(TC)

3个外部时钟输入,每个通道提供2个多功能I/O插座

双PWM 发生器、原理图捕获、波形捕获模式、连接和断开功能

2升。四通道16位PWM控制器WMC)

22、A 两线接口(TWI)

主模式支持,支持所有Atmel EEPROM

23、 所有数字引脚的IEEE 1149.1 JTAG 边界扫描

24、电源

VDDCORE 和VDDBU 电压为1.08V 至1.32V

VDDOSC 和VDDPLL 电压为3.0V 至3.6V

VDDIOP0(外设I/O)电压为2.7V 至3.6V

VDDIOP(外设I/O)电压为11.65V 至3.6V

VDDIOM0/VDDIOM1 可编程电压范围为1.65V 至1.95V 或3.0V 至3.6V(存储器I/O)

at91sam9263 CAN驱动调试经验

以前在调试CAN设备时,我们通常使用从淘宝购买的USB转CAN调试工具。 100K到800K的波特率基本没有问题,所以一些细节我们没有考虑太多。突然有一天,一位客户说我们的CAN驱动程序有问题,无法与他们的CAN调试设备通信。他很担心。于是他拿来工具尝试了一下,果然有效。

于是就借了CAN调试工具回来查看。看了半天,发现是ZLG的产品,于是就去了。我遇到了周立功公司的一个大佬,一个CAN专家,他声称没有他解决不了的CAN问题。但事实证明这是真的。周立功公司的CAN分析仪就是他们一群人制作的。现在他们不做研发,而是转向制造。服务。我们用CAN分析仪检查了一下,发现我们CPU发送的CAN波形的波特率不匹配。虽然设置为500K,但由于CPU时钟频率非常规,分频后CAN时钟在512K左右。 ZLG的CAN调试工具是标准产品,一般都要求严格的时序,因此我们的设备无法与其调试工具进行通信。但网上购买的USB转CAN调试工具将SJW域设置为比较大的3或4左右,就可以和大部分CAN通信,即使对方的CAN波特率不准确,也会有比较大的误差。

大多数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

除了修改这个宏定义外,还需要在board_lowlevel.c中进行一些修改。

#define BOARD_MULA (AT91C_CKGR_MULA (97《》16))

#定义BOARD_DIVA (AT91C_CKGR_DIVA 10)

这是两个系数。注意,分频系数保持不变,但倍频系数减1。从数据表中可以清楚地看出原因。

本来以为这样就够了,但是还有一个地方我忽略了。看一下代码。

void LowLevelInit(void) 函数

无效LowLevelInit(无效)

{

……

如果!定义(sdram)

/* 初始化主振荡器

初始化主振荡器、时钟等一系列操作

#endif //#如果!定义(sdram)。 。

}

整个过程都包含在sdram宏的判断中。如果定义了sdram,则不会进行以下处理。哎呀,怎么可以不做这个处理呢,所以我把上面两个宏定义注释掉了。

这个宏定义不是在文件中定义的,而是在编译器的工程设置中定义的。

选项-C/C++编译器预处理器选项卡,底部定义的符号

也可以直接删除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 》

信息:低级初始化:OK 开始主. AT45DB321.

从Flash加载CE-BOOT到SDRAM跳转… -

===================================

从现象来看,已经找到了DATA FLASH,说明SPI线是正确的,但是为什么读取的数据有问题呢?

疑似问题如下:

第一:DATA FLASH的SPI硬件有问题,可能存在干扰。

第二:从DATA FLASH复制数据到SDRAM时,出现错误,数据不正确,SDRAM初始化有问题。第三:因为我们的SPI线和之前的版本不一样,所以使用了MAX3002进行隔离。怀疑是MAX3002本身导致SPI线不稳定。

第四:CPU版本有问题。 AT91SAM9263的SPI已从版本A更改为版本B。据我所知,AT91SASM9263 B版本的SPI需要两次复位才能工作。

对疑似问题一一核实:

1: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版本的问题。我以为自己的代码水平比较落后,于是向迅雷工程师求助。最终验证结果如下:

从DATA FLASH读取的数据放入SDRAM时出现问题。我们以前的老板没有问题。可以从DATA FLASH中正确读取数据,然后显示在串口上。每次从DATA FLASH读取10个字节,发现每次读出来的数据都是一致的,但是都是不正确的。

没有其他办法。雷工已经很久没有写代码了,所以他必须预约第二天去百特见他们的工程师刘工。刘工是我的同胞,也是我的好朋友。当晚我们一直工作到半夜,终于核实了。现象是:从DATA FLASH偏移0X8000地址读取的数据放在SDRAM中,在某个位置发现几乎相同的数据。最终结果给出:AT91SAM9263的B版本可能有问题,但最大的问题是:SDRAM工作后,影响SPI的稳定性。

第四:太晚了。大家都回家了。 (这时候我就问百特要A版的CPU,他们说没货了,第二天就可以发货。)我实在是没有头绪。解决办法就是赶紧订购CPU,AT91SAM9263版本A。正好Baxter缺货了。他们的老板从香港过来订购后,我们拿到了,很快就穿上了。这个过程只用了一天的时间。已经是下午了,下午三点。刚做完,带上测试软件,运行到李工程师(我们的焊接师傅)那里,把所有的工具都设置好,一测试,我就很郁闷,但是还是不行。我的天啊.

第五:A版本好像也不行。我只能怀疑是板子的接线有问题,因为想不出其他办法。这时我松了口气,因为我以为问题已经找到了。但是SPI 的哪条线受到干扰呢?我深深相信白特柳工的话。实在是没有别的办法了。早上我赶紧拿着A版的板子跑到Baxter那里,找到了刘工。 (我想重复一下他验证的结果,刘工改了好久,发现是从DATA FALSH的0地址读取的,把数据放入SDRAM是没有问题的,我一直怀疑是有问题SDARM初始化的问题。)根据这几天的测试结果,我发现了一个疑问。我找到了该芯片的版本A。我写了一个小程序来读取数据闪存。检索数据并将其放入SRAM 也是不正确的。而且,结果和之前的测试一模一样。我一直怀疑和芯片有关系。现在看来可以完全排除是芯片AT91SAM9263的问题了。

第六:从DATA FLASH读取数据放入SRAM也不正确(我把SDRAM关掉了)。我推翻了刘工关于SDRAM干扰SPI DATA FLASH的观点。

刘工发现从DATA FALSH的0地址读取的数据和放入SDRAM的大部分数据是一样的。这次他恢复了所有代码,将DATA FLASH地址0处的数据放入0X23F00000(LINUX引导程序U-BOOT的地址)-0X8000位置,这样就可以保证有正确的U-BOOT程序在0X23F00000的位置。但程序运行时,仍然没有得到正确的启动结果。可能有些数据读出后仍然不正确。

第七,确实没有别的办法。我们开始怀疑DATA FLASH有问题。正好我也问了我们的LISA(LISA是我们的采购商,我一直以为DATA FLASH是从Baxter购买的,最后发现这个东西是从市场上购买的,我一头雾水。但是当我问LISA时,我没放在心上。LISA说芯片是原装的)。我只是碰巧带了一个旧版本的主板。更换了之前版本板子的DATA FLASH后,就完全OK了。

以上知识分享希望能够帮助到大家!