如何使用ChatGPT建立自动化AI研究人员团队
2023-12-02
很多朋友对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了。
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
2023-12-02
栏目热点
如何使用ChatGPT建立自动化AI研究人员团队
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面