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.

[参考译文] CCS/MSP430FR6989:闪存完整性检查

Guru**** 2595805 points
Other Parts Discussed in Thread: MSP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/635267/ccs-msp430fr6989-flash-integrity-check

部件号:MSP430FR6989
主题中讨论的其他部件: MSP430WARE

工具/软件:Code Composer Studio

您好,

II正在处理该项目,我们要求在每次启动时进行闪存完整性检查  

下面是代码和项目txt文件  

e2e.ti.com/.../project.txt;

u

const UINT32_t addr = 0x4400

UINT32_t DATA_Calculate_CRC (UINT32_t地址,UINT32_t大小)

CRCINIRES = 0xFFFF;
while (大小!=0)

CRCDI_L =_data20_read_char (addr);
++地址;
-大小;
}
RETURN ((UINT32_t) CRCRESR <<16)+~CRESR;
}

我的查询:4400是闪存的正确起始地址?

应该是什么大小,就像txt将128字节大小一样  

我看过很多关于同一主题的论坛,但没有得到明确的想法,所以我也有同样的想法

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

    MSP430FR6989是基于FRAM的器件,因此器件上没有闪存。 设备的FRAM控制器已支持位错误纠正和不可纠正位错误检测。 它还有一个内存保护单元(MPU),您可以使用它来防止对FRAM进行不必要的写入。 此外,由于FRAM结构的一些固有属性,它在许多方面比闪存更可靠。 有关详细信息,请参阅以下应用说明:
    MSP430 FRAM -使用方法和最佳实践(http://www.ti.com/lit/slaa628 )
    MSP430 FRAM质量和可靠性(http://www.ti.com/lit/slaa526 )

    以上所有内容都是说,由于FRAM的性质和控制器中添加的功能,您可能不需要使用FRAM进行内存完整性检查。 也就是说,如果您仍想进行此手动检查,则可以在数据表中找到此特定芯片的内存地址起始点。 请参阅第6.13 节"内存",表6-45。 "内存组织。"
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,谢谢您的回复,

    因为我的客户想要测试固件的完整性。所以我只想从FRAM读取数据并计算CRC,但上面提到的代码 对我不起作用,请向我提出相同的建议

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

    您好,

    我尝试使用下面的代码读取数据0x8800,但我无法获得内存数据并 访问txt文件,因为我希望缓冲区数据为4f,14,F1,如果我错了.e2e.ti.com/.../prjct.txt,请更正我

    CHAR*数据;

    字符readResult =0;

    readResult = boot_readMemory (0x8800,2,data);//

    char boot_readMemory (unsigned long addr,unsigned int length,char* data)

    无符号长I;

    用于(i = addr + length -1;i >= addr;I--)

    data[i - addr]=_数据20_read_char (i);
    }
    返回0;
    }

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

    我尝试了两种三种不同的方法,因为我要使用以下代码逐个读取十六进制数据

    char temp_8bit[3];
    长地址= 0x9000;
    无符号长I;

    temp_8bit[0]=__data20_read_char (address++);
    printf ("data1 =%02x\n",temp_8bit[0]);
    temp_8bit[1]=__data20_read_char (address++);
    printf ("data2 =%02x\n",temp_8bit[1]);
    temp_8bit[2]=__data20_read_char (address++);
    printf ("data3 =%02x\n",temp_8bit[2]);

    但我的疑问是如何将数据保存在缓冲区中,因为闪存长度为0xBB80 plz,很快会回复
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Parth:

    这是FRAM而不是闪存,因此它的作用略有不同。 您可以像RAM一样读取和写入FRAM。 这意味着您只需要一个指针即可读/写。 _data20_read_char (x)是一个旧宏。 您不会在此处使用它。 如果您愿意,可以在启动程序时在FRAM中创建专用缓冲区,以实现此目的。 要执行此操作,只需使用#pragma persistent对数组进行解码。

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

    您好,

    如果你可以共享一些数据,我只需要存储在FRAM中的整个数据,并想计算该数据的CRC  

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

    我没有一个例子说明你在寻找什么。 有一个关于此器件的CRC与MSP430Ware的示例。 您可以通过TI资源浏览器访问MSP430Ware。 TI资源浏览器可在CCS中或 http://dev.ti.com上找到 。 导航至TI资源管理器->软件-> MSP430Ware ->器件-> MSP430FR5xx_6xx -> MSP430FR6989 ->外设示例->寄存器级别-> msp430fr69xx_crc.c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../4666.prjct.txthiJace,

    这正 是我想要做的,但如果你引用代码CRC输入是硬编码的,在我的应用程序中,我想从txt 文件中获取,该文件从地址@4400,8800,ff80,ffc6开始,并以q结尾,因为我想读取整个数据 txt文件  

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

    Parth,

    除非您阅读并分析TI TXT文件,否则您将无法执行此操作。 地址标识符(@ox4000)不会下载到部件中。 链接器读取htese并相应地装入该零件。 您必须为每个设备硬编码边界。

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

    您好,Jace:

    我正在考虑这种方法

    1.首先从TI-txt文件中读取1KB的数据并将其保存在缓冲区中,然后对整个128KB的内存执行CRC  

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

    如果我想在infoD上写入CRC数据,我该怎么写
    下面是代码

    #define FRAM_TEST_START 0x4400
    UINT16_t *FRAM_WRITE_PTR;

    crc_result = 0x1234
    fRAM_write_ptr =(uint16_t*)fRAM_test_start;

    FRAMCtl_a_write16(((uint16_t *)crc_result,fRAM_write_ptr,2);
    }

    void FRAMCtl_a_write16(uint16_t *dataPtr,uint16_t *framPtr,uint16_t numberOfWords)

    while (numberOfWords > 0)

    //写入到FAM
    *framPtr++=*dataPtr++;
    蠕虫的数目--;
    }
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好

    有关如何写入FRAM的示例,请参阅MSP430ware中代码示例中的FRAM写入示例。 采用以下路径:TI资源管理器->软件-> MSP430Ware ->器件->MSP430FR5xx_6xx -。 MSP430FR6989 ->外设示例->寄存器级别-> msp430fr69xx_framwrite.c
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    我尝试了这个例子,它正在工作,但是如果我想在某个特定的固定位置存储CRC cvalue,例如我想在infoD 0x1800中存储,那么如何写这个,以及如何在十六进制/ txt文件中看到这个值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    如果要将信息存储在特定地址,则只需将指针定义为该地址即可。 您可以使用前面介绍的持久性#pragma,以确保编译器将该数据单独保留。 CCS for MSP430 User Guide中详细介绍了CCS的pragma。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    我要使用framctl.c中的引用代码,用固定模式写入FRAM2起始地址0x1万和长度8.192万v的数据
    我观察到我只能写入300字节的数据,所以如何写入总共8.192万字节

    void FRAMCtl_filemory32(UINT32_t value,
    UINT32_t *帧属性,
    UINT16_t计数)

    while (count > 0)(计数> 0)

    //写入到FAM
    *framPtr++=值;
    计数--;
    }
    }