This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] slaa294a校验和中的问题

Guru**** 656470 points
Other Parts Discussed in Thread: MSP430G2553, MSP430F1612
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/639050/problems-in-slaa294a-checksum

线程中讨论的其他部件:MSP430G2553MSP-EXP430G2MSP430WAREMSP430F1612

您好,

我计划使用应用说明和示例代码 sla294a中列出的校验和功能。

有几个地方的示例似乎有一些germlins。
希望TI或社区的人可以告诉我我是否正确,这样我就不会在生产中出现错误。

  • 代码和pdf文件中的注释表明校验和跨越闪存的两个段,应该为1024字节/0x400 (0xFA00到0xFDFF)。
    在用于生成和测试校验和的For循环中,范围是0到0x200,看起来它只跨越一个块(512字节/0x200)。  
    (我假定递增指针以字节而不是文字为单位)。
  • 在设置FCTL2时,使用FSSEL0,这意味着ACLK是基本时钟
    使用分禾器FN0,这意味着分禾器应为一个  
    闪存时钟应写入ACLK/1而不 是MCLK/2
  • 在本示例末尾,缺少设置锁定代码。 这是可选的还是这种遗漏是错误的?
  • 注释中列出的整体逻辑尚未在代码中实现。  

期待社区提供一些答案。 如果我发布了一个应该通过搜索找到的主题-请告诉我应该使用什么术语。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Frank,

    我会向我们的专家查询并回复您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Frank,

    您能告诉我您使用的是哪种设备吗? 我看到您标记了MSP-EXP430G2 Launchpad。这让我相信您使用的是MSP430G2553或其中的一些变体。

    对于指针索引问题,由于数组定义为一组Ints,因此它将通过16位Ints递增。因此,它每次通过单词或2个字节递增。

    对于您的其他问题,我没有深入探讨这些问题,因为此计划是为MSP430F1612编写的,它的时钟系统和闪存系统与我们后来的一些部件不同。 如果您使用的是这一系列部件,请告诉我,我可以进一步了解。 如果您正在寻找有关如何在MSP430G2553或类似型号上写入闪存的示例,则MSP430Ware中提供了此示例。 导航至CCS内的TI资源浏览器或dev.ti.com,从那里选择以下路径:TI资源浏览器-。 软件-> MSP430Ware ->设备-> MSP430G2xxx -> MSP430G2553 ->外设示例->寄存器级别->MSP430G2xxS 3_flashwrite_01.c。 在此路径中的其他设备上也可以找到类似的示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jace:
    感谢您的回复。 我认为这些问题是75 % 在更好地理解我的方面后解决的。

    1-用于循环索引在字级工作,而不是像我想的那样(字节级)解释了第一个问题。

    2-我正在使用MSP430g2553,因此您从资源管理器中提供的示例非常有用。
    FCTL2和FCTL3在系列指南中的使用是相同的,我现在已了解以下内容:

    3- FCTL2 FNx的工作方式如下:
    FCTL2 = FWKEY + FSSEL? + FN0 ->除数= pow (2.0)+ 1 = 1 + 1 = 2
    FCTL2 = FWKEY + FSSEL? + FN1 ->除数= pow(2,1)+1 = 2+1 = 3
    FLTL2 = FWKEY + FSSEL? + 0x3F ->除数= 0x3f + 1 = 63 + 1 = 64
    (FNx值表示2的幂,但除数也可以是一个arbirary十六进制代码。

    4 -我仍然坚持与时钟选择器不一致的问题。
    例如,430g2x53系列指南(第324页)指出FSSELx 00 - ACLK和01 MCLK
    (可分别使用ACLK <-> FSSEL0和MCLK <-> FSSEL1进行访问。)
    与此相反,代码示例msp430g2xxS 3_flashwrite_01.c表示FSSEL0 <->MCLK。


    希望听取关于项目4的发言。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    弗兰克

    我可以看到你对第4部分的困惑。 如果实际将代码示例导入到CCS中并将鼠标悬停在FSSEL0上,您将看到它解析为值0x0400。 这与MCLK的选择相对应,因为第6位写为'1'。 顺便提一下,FSSEL1解析为0x0800,选择了SMCLK。 现在使用FSSEL_0/FSSEL_1/FSSEL_2值时,您将分别将0/1/2放入这些位字段中。 请注意,在这种情况下,下划线将区分两者。 我认为使FSSEL0等同于FSSEL_1的做法是为了使最终用户默认为MCLK,而不是尝试使用ACLK。 这些设备的ACLK通常用于无法生成闪存控制器所需的定时的LF Xtals。

    换言之,它有点混乱,但FSSEL0宏表达式与寄存器选项没有正确关联。 相反,FSSEL_0/1/2宏表达式直接与寄存器相关。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在就有道理了。 谢谢你。
    在将来处理寄存器时,我将确保信任IDE中报告的值,而不是对文档的解释。

    此致,
    弗兰克