tag 标签: sam4s

相关博文
  • 热度 9
    2014-11-6 22:59
    943 次阅读|
    0 个评论
    今天发现ASF已经升级到3.20了,想看看上次发现的TWI问题是否有改进,于是先升级,然后在使用ASF 3.20创建例程,发现结果还是一样。查看了一下twi.c和twi.h文件,主要就是支持新器件SAMG55。  
  • 热度 13
    2014-10-28 23:00
    2015 次阅读|
    0 个评论
    本来上周就应该发第二个实验,但是因为很多原因没有时间整理,今天终于抽空完成了。 第二个实验还是ASF中自带的,是低功耗测试,测试在不同时钟频率和不同工作模式下的功耗。这个实验只需要SAM4S Xplained,不需要其它扩展板。 首先,打开AS6.2,然后插上SAM4S Xplained,很快AS6就识别出SAM4S Xplained开发板。然后从ASF中,选择LOW Power Demo for SAM Board - SAM4S Xpalined Pro。     然后创建项目,再编译并下载。这些过程不再重复了,如有不清楚的,可以参见 例程一 。       然后将开发板上SW0旁边的短路块取下,串入万用表测量电流。     在打开一个终端软件,并配置串口,选择波特率为115200。下面使用的是putty,使用其它软件也可以。     运行程序,可以在终端上看到下面的提示。这时默认是Flash访问模式128位,时钟24M,电流约6.8mA。     根据提示选择不同的工作模式和时钟频率。实测在活动模式下,120M主频电流约20mA,120K时约120uA;Sleep模式下,120M主频电流约11mA,125K频率时约110uA;wait模式下,约26uA;而Backup模式下只有2uA。在改变模式或时钟前,需要按下SW0,使程序回到正常状态。     再尝试选择64位Flash访问模式,在活动模式和Sleep模式下电流普遍有所上升。wait模式和Backup模式则没有变化。        
  • 热度 13
    2014-10-21 00:13
    1556 次阅读|
    0 个评论
    周末对SAM4S Xplaind开发板做了简单的测试。SAM4S Xplained支持AS6和MDK,但是出于对AS的偏好,所以先从AS6开始了。首先是测试AS6中带有官方的例程。使用前,先在AS.2中,升级ASF到最新的3.19;升级ARM编译器到最新的4.8.3。   先运行AS6.2,然后插上SAM4S xplained以及OLED和I/O1 xplained子卡,很快就被自动识别出来,因为每块板上都有一片ATSHA204,可以通过i-wire方式和板载的EDBG仿真器通讯。   新建项目,从官方ASF库中选择starter kit demo。   这个例程测试I/O xplained子卡上的温度传感器、光线传感器和TF,并在OLED上显示出来。因此它需要使用到OLED和I/O xplained两个子卡。它们分别接在EXT2和EXT3扩展口上,不能接错了。     选择好模板,以及项目的名称和位置,按下OK键后,会一个许可提示。(在ASF3.19中需要同意两个许可,在更早的版本中只需要同意一个许可。)不知道为什么一个例程也搞得这么复杂。   同意后,就会自动创建项目文件,这需要一点时间,通常是10s-60s,与计算机配置有关。   完成后就可以编译程序了。第一次编译会比较慢,因为包括ASF驱动的所有程序都复制到项目目录下,全部源文件都需要重新编译。这通常需要30s-3minute。 在下载或者仿真前,还需要选择一下仿真器,这里当然是选择板载的EDBG仿真器了。     下载后,如果连线无误,那么就可以在OLED上看到温度的数值了,并有一个不断移动的条形图。按下OLED子板上的按钮1,就可以切换不同功能,可以测试光强和TF卡,同时对应的黄色LED会亮。(旧版本ASF的例程有点不同,是按对应的按钮,切换不同功能,3.19中只能按按钮1。因为版本太多,不知道是从哪个版本开始改的。) 本来到这里就可以结束了,但是我发现了一个奇怪的现象,于是有了下面的测试。问题就是温度显示了20次左右后,突然温度就变为0了。开始以为温度传感器有问题,但是按下RESET后,温度显示正常,然后20次后又变为0了,重复几次都是这样。看起来这就不是硬件问题了,于是又尝试了ASF旧的例程。安装ASF3.19后,旧版本的ASF还在,这一点比较好,可以方便的进行选择和比较。找了最早支持SAM4S Xplained的ASF,是ASF 3.7.3版,因为一般来说第一版是测试最仔细的,bug也较少。按上面同样的步骤操作,这次温度显示正常了,连续运行很长时间也没有问题,看起来就是ASF的问题了。   进一步分析程序,在main.c中,我们可以看到温度测试部分的代码。                  // Get temperature in a range from 0 to 40 degrees.                 if (at30tse_read_temperature(temp) == TWI_SUCCESS)                 {                         // Don't care about negative temperature.                         if (temp 0)                                 temp = 0;                             // Update temperature for display.                         // Note: -12 in order to rescale for better rendering.                         if (temp 12)                                 temperature = 0;                         else                                 temperature = temp - 12;                 }                 else                 {                         // Error print zero values.                         temperature = 0;                 }   当温度小于0度或者读取温度错误的时候,温度就会变为0。继续分析at30tse_read_temperature函数,它在{project}\src\ASF\common\components\memory\eeprom\at30tse75x\目录下。这个函数主要是调用另外一个函数         /* Read the 16-bit temperature register. */         error_code = at30tse_read_register(AT30TSE_TEMPERATURE_REG,                         AT30TSE_NON_VOLATILE_REG, AT30TSE_TEMPERATURE_REG_SIZE, buffer); 而在at30tse_read_register函数中,主要是调用另外一个函数twi_master_read。         return twi_master_read(BOARD_AT30TSE_TWI, packet); 再看看twi_master_read函数,它再twi.c这个文件中。twi.c的位置在{project}\src\ASF\sam\drivers\twi\下。我们用文件比较工具(我使用的是Totalcmd内置的文件比较功能)对比了新旧版本ASF中这两个函数,发现主要不同如下: 新版本         uint32_t timeout = TWI_TIMEOUT;         while (cnt 0) {                 status = p_twi-TWI_SR;                 if (status TWI_SR_NACK) {                         return TWI_RECEIVE_NACK;                 }                 if (!timeout--) {                         return TWI_ERROR_TIMEOUT;                 }                                                  /* Last byte ? */                 if (cnt == 1   !stop_sent) {                         p_twi-TWI_CR = TWI_CR_STOP;                         stop_sent = 1;                 }                 if (!(status TWI_SR_RXRDY)) {                         continue;                 }                 *buffer++ = p_twi-TWI_RHR;                 cnt--;                 timeout = TWI_TIMEOUT;         } 旧版本           /* Send all bytes */         while (cnt 0) {                 status = p_twi-TWI_SR;                 if (status TWI_SR_NACK) {                         return TWI_RECEIVE_NACK;                 }                     if (!(status TWI_SR_TXRDY)) {                         continue;                 }                 p_twi-TWI_THR = *buffer++;                     cnt--;         }; 桔黄色部分就是新版本增加的内容,主要就是增加了超时保护,它的默认值在twi.h中定义为15000。尝试将这个默认值修改为150000,在编译下载,这次结果正常了。 本来新版本ASF的想法是好的,为twi操作增加一个超时保护,防止因为意外造成程序死锁,但是因为一些问题,造成运行结果不稳定,估计这个版本的ASF也是没有经过完整测试的。 小结 : ASF的使用习惯和其它软件不太一样,需要慢慢适应,这一点可能就让很多使用者离开。 ASF虽然功能很强,但看起来还不稳定,新版本不一定比旧版本好。
  • 热度 13
    2014-10-19 21:50
    871 次阅读|
    0 个评论
    今天,发现SAM4S Xplained开发板居然有一些瑕疵。印象中Atmel的开发板一向是以精致著称的,没想到现在也开始变差了,希望这只是个别现象。 1. 在主板反面,LDO旁边的钽电容,居然是斜的。     2. 主板反面,EXT2和EXT3插座补焊的痕迹明显。 3. OLED子板上补焊明显。  
  • 热度 15
    2014-10-17 16:12
    1023 次阅读|
    0 个评论
    今天的雾霾非常严重,百度上的指数已经到267了,呼吸都感到很难受。不过早上收到了期待已久的SAM4S Xplained Pro开发板,真是非常高兴。这是参加爱板网活动得到的,所以也要感谢爱板网给了我一个尝试的机会。 还是先晒晒板,然后就开始准备学习了。               Atmel很大气的准备了两根microUsb线,还有一个2G的TF卡。什么都不需要在外购就可以开始玩了。