查看: 4500|回复: 13

SAM4S Xplained开发板第一个例程详细评测

[复制链接]

主题

好友

9489

积分

版主

  • TA的每日心情
    奋斗
    2019-7-16 10:34
  • 签到天数: 1616 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    发表于 2014-10-20 23:41:03 |显示全部楼层
    本帖最后由 shaoziyang 于 2014-10-21 00:06 编辑

    周末对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仿真器通讯。

    demo1_01.jpg


    新建项目,从官方ASF库中选择starter kit demo。

    demo1_02.jpg


    这个例程测试I/O xplained子卡上的温度传感器、光线传感器和TF,并在OLED上显示出来。因此它需要使用到OLED和I/O xplained两个子卡。它们分别接在EXT2和EXT3扩展口上,不能接错了。

    x.jpg


    选择好模板,以及项目的名称和位置,按下OK键后,会一个许可提示。(在ASF3.19中需要同意两个许可,在更早的版本中只需要同意一个许可。)不知道为什么一个例程也搞得这么复杂。

    demo1_03.jpg


    同意后,就会自动创建项目文件,这需要一点时间,通常是10s-60s,与计算机配置有关。

    demo1_04.jpg


    完成后就可以编译程序了。第一次编译会比较慢,因为包括ASF驱动的所有程序都复制到项目目录下,全部源文件都需要重新编译。这通常需要30s-3minute。

    在下载或者仿真前,还需要选择一下仿真器,这里当然是选择板载的EDBG仿真器了。

    demo1_05.jpg


    下载后,如果连线无误,那么就可以在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[BUFFER_SIZE - 1] = 0;
                            else
                                    temperature[BUFFER_SIZE - 1] = temp - 12;
                    }
                    else
                    {
                            // Error print zero values.
                            temperature[BUFFER_SIZE - 1] = 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虽然功能很强,但看起来还不稳定,新版本不一定比旧版本好。
    • 使用AS6不如使用MDK,起码下载和仿真速度快一点。


    回复

    使用道具 举报

    匿名  发表于 1970-1-1 08:00:00
    post_deleted
    回复

    使用道具

    主题

    好友

    1万

    积分

    翰林

  • TA的每日心情
    奋斗
    2018-12-14 13:53
  • 签到天数: 1017 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-10-21 10:59:35 |显示全部楼层
    楼主的评测好详细,赞一个!!!
    PS:到爱板网“经验”频道分享更多评测好文章吧 http://jingyan.eeboard.com/
    回复

    使用道具 举报

    主题

    好友

    9489

    积分

    版主

  • TA的每日心情
    奋斗
    2019-7-16 10:34
  • 签到天数: 1616 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    发表于 2014-10-21 11:50:47 |显示全部楼层
    小菜儿 发表于 2014-10-21 10:59
    楼主的评测好详细,赞一个!!!
    PS:到爱板网“经验”频道分享更多评测好文章吧 http://jingyan.eeboard. ...

    好的,先转过去试试。
    回复

    使用道具 举报

    主题

    好友

    1万

    积分

    翰林

  • TA的每日心情
    奋斗
    2018-12-14 13:53
  • 签到天数: 1017 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-10-21 13:30:22 |显示全部楼层
    shaoziyang 发表于 2014-10-21 11:50
    好的,先转过去试试。

    回复

    使用道具 举报

    主题

    好友

    1万

    积分

    版主

  • TA的每日心情
    开心
    2019-6-24 16:41
  • 签到天数: 709 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-10-24 20:49:05 |显示全部楼层
    好像很不错的样子哦
    回复

    使用道具 举报

    主题

    好友

    14

    积分

    白丁

  • TA的每日心情
    开心
    2014-12-8 10:44
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-6 14:55:50 |显示全部楼层
    lz在哪里申请的,现在打算用这个芯片在产品上,听说稳定性比st强。就差资料去评估一下了
    回复

    使用道具 举报

    主题

    好友

    9489

    积分

    版主

  • TA的每日心情
    奋斗
    2019-7-16 10:34
  • 签到天数: 1616 天

    连续签到: 2 天

    [LV.Master]伴坛终老

    发表于 2014-12-6 21:48:46 |显示全部楼层
    zhcj66 发表于 2014-12-6 14:55
    lz在哪里申请的,现在打算用这个芯片在产品上,听说稳定性比st强。就差资料去评估一下了 ...

    就是在爱板网的活动中抽奖的。另外现在与非网的ATMEL社区也在搞活动,送开发板的,你可以去试试啊。

    http://atmel.eefocus.com/module/forum/forum.php
    回复

    使用道具 举报

    主题

    好友

    903

    积分

    举人

  • TA的每日心情

    2016-1-22 11:18
  • 签到天数: 159 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2015-1-1 22:52:38 |显示全部楼层
    wudianjun2001 发表于 2014-10-21 08:21
    学习了。我家里的笔记本忙的不行,昨天好不容易把AS6.2给装上了,可驱动不行,晚上回去继续折腾 ...

    赞一个  as6。2 不好装
    回复

    使用道具 举报

    主题

    好友

    2096

    积分

    进士

  • TA的每日心情
    开心
    2017-7-4 13:51
  • 签到天数: 347 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-1-14 22:13:09 |显示全部楼层
    折腾了一晚上都要疯了,就跑这例程,什么都没改,结果OLED屏幕就是不亮
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /7 下一条

    手机版|电路城

    GMT+8, 2019-10-20 17:31 , Processed in 0.131598 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部