この例では、SDK を使用せずに EEEPROM を使用する方法を示します。この例は、これと非常によく似ています
DFLASHパーティショニングはEEE_Init()関数によって行われます。MCUがすでにパーティション分割されている場合は、[デバイスのパーティションを保持する]チェックボックスをオンにしてください。
- 注 - PE Microスクリプトにバグがあり、このオプションによりpegdbserverがクラッシュします。
対象MCU:S32K144
デバッガ: OpenSDA
Hi,
残念ながら、PE Microはそれを修正しません。こちらで詳細を確認できます。
https://community.nxp.com/message/1269942
Jiri
Hi Jiri,
私はこのスレッドを通過し、最終的にPE Microにバグがあることを理解し、あなたは同じチケットを発行しました。
この問題を解決するための予想時間を知りたいのですが。親切に同じことを共有してください。
ラジュ
Hi Jiri!
この「パーティション分割PE Microを保持する」バグはもう解決されていますか?
それとも、他の実用的な解決策はありますか?
S32DS 2.2をインストールし、完全に更新されました(すべてのPE Microも最新です)が、運が悪いです!(S32DS-18も同様)
2台のコンピューターで同じ問題がありますWin7 64ビット...
OpenSDAとMultilink Universalの両方でテスト済み。
私は他のSDK EEPROMの例を使用しています。(トップポストで参照)
「メモリ範囲の保持」を使用すると、pegdbserverは常にクラッシュし、ターゲットを正常にロード/フラッシュできない場合を除き、すべてが機能しているように見えます。
OpenSDAを使用する場合:
「127.0.0.1」から127.0.0.1経由の接続。ポート「57803」から6224への接続
「127.0.0.1」から127.0.0.1経由の接続。ポート「57804」から7224への接続
FreeRTOS カーネルシンボルを検索しています...
rsp_qC - qシンボル: 707843757272656E74544342
pxCurrentTCB が見つかりません。FreeRTOS 分析が有効になっていません。
●Copyright 2018 P&Eマイクロコンピュータシステムズ株式会社
コマンドライン:C:\ NXP \ S32DS_ARM_v2.2 \ eclipse \ plugins \ com.pemicro.debug.gdbjtag.pne.expansion_4.5.3.202002032127 \ win32 \ pegdbserver_console-device=NXP_S32K1xx_S32K144F512M15 -startserver -singlesession -serverport=7224 -gdbmiport=6224 -interface=OPENSDA -sL
OpenSDAが検出されました - Flashバージョン1.19
CMD>REの
初期化。
ターゲットはリセットされ、アクティブです。
CMD>CM C:\ NXP \ S32DS_ARM_v2.2 \ Eclipse \ plugins \ com.pemicro.debug.gdbjtag.pne.expansion_4.5.3.202002032127 \ win32 \ GDI \ P&E \ supportFiles_ARM \ NXP \ S32K1xx \ freescale_s32k144f512m15_pflash_dflash_eeprom.arp
初期化。
初期化。
;version 1.05, 2019/12/03, Copyright 2019 P&E Microcomputer Systems, Inc.全著作権所有。www.pemicro.com [s32k144f512m15_x_pflash_dflash_eeprom_rev2]
;フリースケール・デバイス、S32K144F512M15、pflash_dflash_eeprom
;begin_cs デバイス=$00000000、長さ=$14001000、ram=$20000000
プログラミングアルゴリズムを読み込んでいます...
完成です。
CMD>PA 0204
開始。
完成です。
プログラミングシーケンスは、消去、ブランクチェック、プログラム、および検証{default}です。
CMD>VCの
オブジェクト ファイル CRC-16 をデバイス範囲に確認しています ...
ブロック00000000-000019EF ...
計算された CRC-16 がブロックと一致しません。(ファイル = $186D、デバイス = $9EBD)
フラッシュの現在の内容がプログラムするアプリケーションと一致しません
CMD>EM ~50秒間ここで立ち往生する。
消去前にデータ範囲$ 10000000-$ 1000FFFFを保持します...
完成です。
消去。
モジュールは消去されました。
リロードプログラミングアルゴリズム...
完成です。
保存されたデータ範囲$ 10000000-$ 1000FFFFの再プログラミング...
完成です。
ターゲット プロセッサとの通信中にエラーが発生しました - RESET を試してください。
CMD>PMの
プログラミング。
オブジェクトファイルデータを処理しています...
.
プログラム。
ターゲット プロセッサとの通信中にエラーが発生しました - RESET を試してください。
CMD>VCの
CRC-16 アルゴリズムの読み込み中にエラーが発生しました。
CRC-16 アルゴリズムの読み込み中にエラーが発生しました。
CRC-16 アルゴリズムの読み込み中にエラーが発生しました。
デバイスのフラッシュの確認エラー
Flashのプログラミング中にエラーが発生しました。
PEmicro GDB Launch Failure : フラッシュ プログラミング中にエラーが発生しました。デバッグ セッションを終了しています。
pegdbserver がクラッシュしました...
Multilink Universalの場合:
「127.0.0.1」から127.0.0.1経由の接続。ポート「57868」から6224への接続
「127.0.0.1」から127.0.0.1経由の接続。ポート「57869」から7224への接続
FreeRTOS カーネルシンボルを検索しています...
rsp_qC - qシンボル: 707843757272656E74544342
pxCurrentTCB が見つかりません。FreeRTOS 分析が有効になっていません。
●Copyright 2018 P&Eマイクロコンピュータシステムズ株式会社
コマンドライン:C:\ NXP \ S32DS_ARM_v2.2 \ eclipse \ plugins \ com.pemicro.debug.gdbjtag.pne.expansion_4.5.3.202002032127 \ win32 \ pegdbserver_console-device=NXP_S32K1xx_S32K144F512M15 -startserver -singlesession -serverport=7224 -gdbmiport=6224 -interface=USBMULTILIL
P&E インターフェイスの検出 - Flash バージョン 10.42
CMD>REの
初期化。
ターゲットはリセットされ、アクティブです。
CMD>CM C:\ NXP \ S32DS_ARM_v2.2 \ Eclipse \ plugins \ com.pemicro.debug.gdbjtag.pne.expansion_4.5.3.202002032127 \ win32 \ GDI \ P&E \ supportFiles_ARM \ NXP \ S32K1xx \ freescale_s32k144f512m15_pflash_dflash_eeprom.arp
初期化。
初期化。
;version 1.05, 2019/12/03, Copyright 2019 P&E Microcomputer Systems, Inc.全著作権所有。www.pemicro.com [s32k144f512m15_x_pflash_dflash_eeprom_rev2]
;フリースケール・デバイス、S32K144F512M15、pflash_dflash_eeprom
;begin_cs デバイス=$00000000、長さ=$14001000、ram=$20000000
プログラミングアルゴリズムを読み込んでいます...
完成です。
CMD>PA 0204
開始。
完成です。
プログラミングシーケンスは、消去、ブランクチェック、プログラム、および検証{default}です。
CMD>VCの
オブジェクト ファイル CRC-16 をデバイス範囲に確認しています ...
ブロック00000000-000019EF ...
計算された CRC-16 がブロックと一致しません。(ファイル = $186D、デバイス = $9EBD)
フラッシュの現在の内容がプログラムするアプリケーションと一致しません
CMD>EM ~25秒間ここで立ち往生します。
消去前にデータ範囲$ 10000000-$ 1000FFFFを保持します...
完成です。
消去。
モジュールは消去されました。
リロードプログラミングアルゴリズム...
完成です。
保存されたデータ範囲$ 10000000-$ 1000FFFFの再プログラミング... ここで~5秒間立ち往生します。
エラー!最後のコマンドが失敗しました。
エラーデバイスのフラッシュを消去します
Flashのプログラミング中にエラーが発生しました。
PEmicro GDB Launch Failure : フラッシュ プログラミング中にエラーが発生しました。デバッグ セッションを終了しています。
pegdbserver がクラッシュしました...
Hi,
遅れて申し訳ありません。まあ - このコメントされたコードについて特別なことは何もありません - 私はただそれをきれいにするのを忘れました(それはいくつかのテストのものからそこに残っています)。この例を作ったのはまだしばらくですが、私の記憶が正しければ、デフォルトではFlexRAMはフラッシュバックアップのない通常のRAMと同じように有効になっています。エミュレートされた EEPROM として設定した場合、FTFC->FSTAT->RAMRDY は 0 に設定されます。
この例に何か問題がありますか?私は今それをテストしました-そしてそれは期待どおりに働きます。
Jiri
この例では、EEE_int()関数についてかなり混乱しています(EEPROMの使用S32K144 - SDKなし)
私の理解として(AN11983ドキュメントに基づく:S32K1xx EEPROM機能を使用):
flexNVMをエミュレートされたEEPROM(4KB flexRAM)にDEPARTitionedした後 [ 3.1.1 S32K1xx プログラムパーティションコマンド ] :
FTFC->FCCOB[3]=0x80;プログラムパーティションコマンド
FTFC->FCCOB[2]=0x00;CSEc キー・サイズ
FTFC->FCCOB[1]=0x00;セキュリティ フラグの拡張 - ユーザー キーの確認のみが無効
FTFC->FCCOB[0]=0x00;リセットシーケンスでのデータint EEERAMをロードします
FTFC->FCCOB[7]=0x02;EEPROM データセット・サイズ・コード - 4k
FTFC->FCCOB[6]=0x08;EEPROMバックアップサイズ - 64k
FlexRAMをRAMとして使用する設定が必要です[ 3.2.1.1 FlexRAM RAMをRAMとして使用する ] :
FTFC->FCCOB[3]=0x81;Progranコマンド
FTFC->FCCOB[2]=0x00;EEEPROMとして使用されるFlexRAM
FlexRAMをエミュレートされたEEPROMとして使用する場合(FlexRAMでデータの書き込み/読み取りが可能で、このデータは記録されます)
しかし、あなたの例では、FlexRAMをRAMとして使用する設定がコメントアウトされています(したがって、データはまだ正常に書き込まれます)。
なぜですか?まずはよろしくお願いいたします。
こんにちは、UARTが受信したデータをEEPROMに書き込む必要があります。説明書の書き方がわかりません。助けていただけますか。ありがとうございます。
/*
* 主な実装: この 'C' サンプルを使用して、独自のアプリケーションを作成します
*
*/
#include「S32K144.h」/* ペリフェラル宣言を含める S32K144 */
#include 「EEEPROM_io_control.h」
#define USER_DATA_SIZE 32u
#define DISABLE_INTERRUPTS() __asm volatile ("cpsid i" : : : "memory");
#include "s32_core_cm4.h"
void SOSC_init_8MHz(void)
{
SCG->SOSCDIV=0x00000101; //SOSCDIV1 & SOSCDIV2 =1: 分频/1
SCG->SOSCCFG=0x00000024; //Range=2: 选择晶体振荡器的中频范围 (SOSC 1MHz-8MHz)
// HGO=0: 控制晶体振荡器的工作功率模式 --低功率模式
// EREFS=1: 外部参考选择OSC内部晶体振荡器
while(SCG->SOSCCSR & SCG_SOSCCSR_LK_MASK); //等待SOSCCSR解锁 寄存器解锁后才可写入
SCG->SOSCCSR=0x00000001; // LK=0: SOSCCSR可以写
// SOSCCM=0: 系统OSC时钟监视器被禁用
// SOSCEN=1: 启用系统OSC
while(!(SCG->SOSCCSR & SCG_SOSCCSR_SOSCVLD_MASK)); //等待系统OSC成功启用,输出时钟有效
}
void SPLL_init_160MHz(void)
{
while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); //等待SPLLCSR寄存器解锁 寄存器解锁后才可写入
SCG->SPLLCSR = 0x00000000; // LK=0: SPLLCSR可以写入
// SPLLEN=0: SPLL禁用
SCG->SPLLDIV = 0x00000302; // SPLLDIV1 分频/2; SPLLDIV2 分频/4
SCG->SPLLCFG = 0x00180000; // PREDIV=0: 锁相环参考时钟分频因子
// MULT=24: SPLL时钟频率的乘法因子
// SPLL_CLK = 8MHz / 1 * 40 / 2 = 160 MHz SPLL_CLK = (VCO_CLK)/2 VCO_CLK = SPLL_SOURCE/(PREDIV+1)*(MULT+16)
while(SCG->SPLLCSR & SCG_SPLLCSR_LK_MASK); //等待SPLLCSR寄存器解锁 寄存器解锁后才可写入
SCG->SPLLCSR = 0x00000001; // LK=0: SPLLCSR可以写入
// SPLLCM=0: SPLL时钟监视器被禁用
// SPLLEN=1: 开启SPLL
while(!(SCG->SPLLCSR & SCG_SPLLCSR_SPLLVLD_MASK)); //等待SPLL成功启用,输出时钟有效
}
void NormalRUNmode_40MHz (void)
{
SCG->RCCR=SCG_RCCR_SCS(6) // SPLL做为系统时钟源
|SCG_RCCR_DIVCORE(0b11) // DIVCORE=3, 分频/4: Core clock = 160/4 MHz = 40 MHz
|SCG_RCCR_DIVBUS(0b11) // DIVBUS=3, 分频/4: bus clock = 160/4 MHz = 40 MHz
|SCG_RCCR_DIVSLOW(0b111); // DIVSLOW=7, 分频/8: SCG slow, flash clock= 160/8 MHz = 20MHZ
while (((SCG->CSR & SCG_CSR_SCS_MASK) >> SCG_CSR_SCS_SHIFT ) != 6) {}//等待系统时钟源成功选择SPLL
}
void UART2_NVIC_init_IRQs(void)
{
S32_NVIC->ICPR[1] = 1 << (35 % 32); /* IRQ48-UART2: clr any pending IRQ*/
S32_NVIC->ISER[(uint32_t)(LPUART2_RxTx_IRQn) >> 5U] = (uint32_t)(1UL << ((uint32_t)(LPUART2_RxTx_IRQn) & (uint32_t)0x1FU));
S32_NVIC->IP[35] = 0x7; /* IRQ48-UART2: priority 7 of 0-15*/
}
void UART2_PORT_init (void)
{
PCC->PCCn[PCC_PORTA_INDEX ] |= PCC_PCCn_CGC_MASK; //使能PTA端口时钟
PORTA->PCR[8] |= PORT_PCR_MUX(2); // Port A8: MUX = ALT2,UART2 RX PTA8复用为RX
PORTA->PCR[9] |= PORT_PCR_MUX(2); // Port A9: MUX = ALT2,UART2 TX PTA9复用为TX
}
//波特率: 9600 , 1停止位, 8个数据位, 无奇偶校验
void UART2_init(void)
{
PCC->PCCn[PCC_LPUART2_INDEX] &= ~PCC_PCCn_CGC_MASK; //禁LPUART2时钟
PCC->PCCn[PCC_LPUART2_INDEX] |= PCC_PCCn_PCS(0b001) //选择时钟 Clock Src= 1 (SOSCDIV2_CLK)
| PCC_PCCn_CGC_MASK; //使能LPUART2时钟
LPUART2->BAUD = 0x0F000034; //配置波特率为9600,1停止位
// SBR=52 (0x34): 波特率模数除数 = 8M/9600/16 = ~52
// OSR=15: 采样率 = 15+1=16
// SBNS=0: 1个停止位
// BOTHEDGE=0: 接收端使用波特率时钟上升沿采样输入数据
// M10=0: 接收机和发射机使用7位到9位的数据字符
// RESYNCDIS=0: 支持在接收数据字期间重新同步
// LBKDIE, RXEDGIE=0: 禁用LIN中断,RX收入边缘中断
LPUART2->CTRL=0x000C0000 | (1<<21);
// RE=1,TE=1: 使能接收及发送
// PE=0: 无奇偶校验
// M7,M,R8T9,R9T8=0: 8个数据位
// DOZEEN=0: 睡眠模式下LPUART正常启用
// ORIE,NEIE,FEIE,PEIE,TIE,TCIE,ILIE,MA1IE,MA2IE=0,RIE=1: 接收中断
// TXINV=0: 传输数据不是反向的
// IDLCFG=0: 1个空闲字符
// ILT=0: 空闲字符位计数在开始位之后开始
}
/*********************************************************************
* 函数原型:void UART2_transmit_char(char send)
* 功 能:UART2发送一个BYTE的数据
* 输入参数:send--需要发送的字符数据
* 返回参数:无
*
* 其他说明:
*********************************************************************/
void UART2_transmit_char(char send)
{ /* Function to Transmit single Char */
while((LPUART2->STAT & LPUART_STAT_TDRE_MASK)>>LPUART_STAT_TDRE_SHIFT==0);
/* Wait for transmit buffer to be empty */
LPUART2->DATA=send; /* Send data */
}
void UART2_transmit_string(文字 data_string[],int len)
{
uint32_t i=0;
for(i=0;i
UART2_transmit_char(data_string[i]);
}
UART2_transmit_char('\n');/* 改行 */
UART2_transmit_char('\r');/*帰る*/
}
ボイド_printf(チャー・data_string[])
{
UART2_transmit_string(data_string,strlen(data_string));
UART2_transmit_char('\n');/* 改行 */
UART2_transmit_char('\r');/*帰る*/
}
typedef 構造体
{
フロートP1;
フロートP2;
フロートP3;
フロートP4;
チャーCH;
ダブルD1;
ダブルD2;
無署名の長いruntime_sec。
int i1;
char user_data[USER_DATA_SIZE];
} eeerom_data_t;
__attribute__ ((section(".eeeprom"))) eeerom_data_t eeerom_data;
ボイドWDOG_disable(ボイド)
{
WDOG->CNT=0xD928C520;/*ウォッチドッグのロックを解除*/
WDOG->TOVAL=0x0000FFFF;/*最大タイムアウト値*/
WDOG->CS = 0x00002100;/*ウォッチドッグを無効にする*/
}
int main(void)
{
WDOG_disable();
SOSC_init_8MHz();/* 8MHz xtalのシステム発振器を初期化 */
SPLL_init_160MHz();/* 8MHz SOSCでSPLLを160MHzに初期化 */
NormalRUNmode_40MHz();/* 初期化クロック: 80 MHz sysclk & core, 40 MHz bus, 20 MHz flash */
//DISABLE_INTERRUPTS();
UART2_init(); //配置UART2 波特率9600 1个停止数 无校验位
UART2_NVIC_init_IRQs(); //配置中断优先级
UART2_PORT_init (); //配置GPIO复用为TX、RX
_printf(「やるだけだ!」);
EEE_Init();
EEE_Write_int32(123456,&eeerom_data.i1);
EEE_Write_ByteArray(char* ソース,char* ターゲット,unsigned int サイズ)
EEE_Write_Byte(rev,&eeerom_data.ch);
while(1)
{
}
/* GHS と IAR の警告メッセージを回避するには: statement is unreachable*/
#if 定義(__ghs__)
#pragma GHS Nowarning 111
#endif
#if 定義 (__ICCARM__)
#pragma diag_suppress=PE111
#endif
0を返します。
}
ボイドLPUART2_RxTx_IRQHandler(ボイド)
{
チャーレヴ;
if (LPUART2->STAT & 0x00200000)
{
rev = LPUART2->データ;
EEE_Write_int32(123456,&eeerom_data.i1);
EEE_Write_Byte(rev,&eeerom_data.ch);
UART2_transmit_char(eeerom_data.i1);
if((LPUART2->STAT & LPUART_STAT_TDRE_MASK)>>LPUART_STAT_TDRE_SHIFT!=0) //判断发射是否空闲
{
LPUART2->DATA = 回転数;
}
}
}
.elfをフラッシュしている場合、このオプション「デバイスのパーティションを保持する」を選択するにはどうすればよいですかコマンドラインを使用してS32K144ボードにファイルしますか?
パーティションの保持はうまくいくはずですが、PE Microのバグのために失敗しました。
PE Microのバグチケットを作成します。
ジリ
Hi,
最後に-私は問題を再現することができます-このスレッドを続けていただきありがとうございます。私の場合、コードに変更がないことに気づいていませんでした。したがって、コードが変更されると、DFLASHは保持されますが、エミュレートされたEEPROMパーティションは削除され、保存されたデータは失われ>。PE Microでパーティションを使用しようとしましたが、何らかの理由でpegdbserverが常にクラッシュします。私はいくつかの回避策を見つけようとします。
ジリ
Hi,
このドライブリンクからプロジェクトを見つけてください。
https://drive.google.com/open?id=1y6wSOSQxKFGRDP5BbzGReuhgXhI0t98n
設定の問題点やEEE_Init問題点があればお知らせください。
ありがとうございます
Sakthivel K
Hi,
まだプロジェクトが届いていません。もう一度送信してください - または、メモリ保存の問題に関連する新しいコミュニティスレッドを作成できます。
ジリ
私は自分のプロジェクト@ " [email protected]" < [email protected] >, コメントループで添付ファイルを見つけることができないため、共有しました。
ぜひご覧いただき、ご意見をお聞かせください。
ありがとうございます
Sakthivel K
Hi,
まあ - それはまさにメモリ保持が使用されるものです - そして問題なく動作しています。プロジェクトには別の問題があるはずです。基本は、エミュレートされた EEPROM (FTFC->FCNFG->EEERDY = 1) としてパーティション化された EEERAM とメモリ保存です。一番上の例はあなたのために働いていますか?可能であれば、プロジェクトを私と共有していただけませんか?見ていきます。
Jiri
はい、私の設定の下に、
シーケンスは次のとおりです。
►FlexRAM (14000000) の書き込み
►Reset
►EEPROMにマッピングされた構造体変数を確認します。(14000000)-わかりました
►EVBボード上のOPENSDAによるアプリケーションビルドとフラッシュのモディティ。
►Reset
・EEPROM(14000000)データにマッピングされた構造体変数が消去されることを確認します。-NOKの
D-Flashレンジを保持しているのに、なぜデータが上書きされているのですか?
私の要件はそれです
ユーザーが一度だけデータを構成した場合は、プログラムの更新(再フラッシュ)によってデータを消去しないでください。これは、構成データの更新ではなく、プログラムの更新だけです。
Hi,
DFLASHメモリを保持している場合(完全なDFLASHは0x10000000〜0x1000FFFF)、PE Microは保存されたデータを書き換えません。
また、[Emergency kinetisデバイス・リカバリ]がオフになっていること、およびPE Microを使用してパーティショニングを実行していないことも確認してください。
Jiri
あなたの情報をありがとう、
これで、FlexRAMで書き込みデータを取り戻すことができますが、別の問題があるのは、再フラッシュによって書き込まれたデータが消去されることです。
この問題を解決するために私は何をすべきですか?
リンカファイルを変更する必要がありますか? リンカファイルのどの部分を変更する必要がありますか?
Sakthivel K
FTFC->FCNFG->EEERDYビットが1に設定されているか確認してからEEE_Writeしてください。あなたの設定では、標準RAMとして使用されるEEERAM領域のようです。
ジリ
再度尋ねるのは申し訳ありませんが、
どうぞ手を貸して下さい
デバッガでワンストップ(パーティションなし、RAMデータ更新なし)
注:オフ:緊急時のKinetisデバイスリカバリ(未使用)、PE構成でパーティションを使用しません
関数が実行されEEE_Write RAMの場所を更新します
私は添付の例EEE_Init()と同じものを使用しました。
@starup RAM 構造の場所が更新されません
ありがとうございます
Sakthivel K
私が述べたように、Init_EEPROMにはバグがあります(現在の例のバージョンは修正されています)。論理的なものの代わりにバイナリ&を使用してください。
if ((FTFC->FCNFG & FTFC_FCNFG_EEERDY_MASK) == 0U)
緊急時のKinetisデバイスのリカバリはメモリ保持よりも優先されるため、使用しないでください。また、パーティション分割は使用しないでください - それはInit_EEPROMによって行われます。
私にとっては、例の設定は問題なく機能しています。デバッグ設定:
新しく開始されたデバッグセッション - WDOG_Disable() の 1 ステップ後 (パーティショニングが実行された最後の 1 ステップの直後):
データの確認もできます
お役に立てば幸いです。
Jiri
以下の順序と構成を確認してください
1) PE の設定
2)UART出力
3) Firmware.
メイン()
Init_EEPROM()
問題:
書き込み-読み取りシーケンスOKの場合
読み取りシーケンス -NOK のみの場合
お願いします、あなたが私に何か見逃している何かを教えてもらえますか?
ええと、それは場合によります。リンカファイルに特別なセクションがあり、たとえば例のような構造を使用している場合EEE_RAM_usage EEE_Readは必要ありません。現在のデータはすでに変数存在しています。
GENY Generation CANの運転経験がない方技術的には、S32K144リソースに収まる汎用Cコードであれば、それを使用できます。GENYドライバーとHW CANバスレイヤー間のインターフェースを実装する必要がありますが、これはチップ固有の部分です。
Jiri
ご回答ありがとうございます、今日はすぐにシーケンスを確認させてください。
それは、スペクティファイメモリからコンタンを読み取るためのこの機能なのでしょうか?
int EEE_Read_int32(int* ターゲット)
{
uint32_tデータ;
一方 ((FTFC->FSTAT & FTFC_FSTAT_CCIF_MASK) == 0){}
データ = *(uint32_t *)ターゲット;
データを返します。
}
重要な注意点::S32k144 MCUでGENY世代のCANドライブを使用することは可能ですか?OEMをサポートしているため、CAN通信をサポートするためのGENYジェネレーションCANドライブと診断ドライブをアプリケーションに含める必要があります。
私の質問は、S32K144 MCUでGENY Driveを使用することは可能ですか?
ありがとうございます
Sakthivel k
大丈夫なはずです。ただし、緊急時のKinetisリカバリが有効になっていないこと、および0x10000000から0x1000FFFFまでのメモリ範囲が保持されていることを確認してください。
EEE_Read関数は何をしますか?通常、特別な読み取りなしで利用可能なデータです。EEERAM エリア (0x14000000+) にマップされた変数は、初期化された変数のように動作します。起動時には、最後に保存された値があります。
Jiri
更新していただきありがとうございます。
リセットとは、両方の方法を意味します(EVBリセットボタンとPEによる再フラッシュ)
注:例:EEEPROMの使用S32K144で説明したように、PE設定を行いました
私のプログラムシーケンスを確認してください。
1.EEE_Write
2.EEE_Read (確認)
3. Stop Debug
4.EEE_Write機能にコメントを付ける
5.デバッガの実行
6.EEE_Read(Set Breakpoint)は、すでに書き込まれたデータが利用可能であることを確認しますか?
このシーケンスには問題がありますか?
私のプロジェクトの要件、
CANからEEPROMへのユーザー設定、リセットが発生すると、アプリケーションはユーザーパラメータを読み取り、チェックプロセスのためにローカルに保存する必要があります。
上記のシーケンスは私の要件に適合しますか?
ありがとうございます
Sakthivel K
Hi,
混乱させて申し訳ありません - 私はテストする時間があまりありません - 私はEEE_Init()に論理的なバイナリと演算子を入れました。EEE_Init() が機能していませんでした。添付ファイルでは例が更新されています。
Example EEE_Init() 関数を使用すると、データは自動的に EEERAM マップ構造体に読み込まれます。リセットとは、EVBのリセットボタンを押すか、PE Microで再点滅することを意味しますか?メモリ保持なしで再フラッシュすると、DFLASH領域が消去されます。
Jiri
あなたの更新のためにThaks、
もう一つ質問があります。
FLEXRAMに書き込んだデータ、それらのデータがD-Flashのバックグラウンドプロセスにコピーされていることをどのように確認すればよいですか?
FlexRAMへの書き込み後、RAMの場所に使用できないデータをリセットすると、
旧:
EEE_Write_int32(123456,&eeerom_data.i1);
リセット
EEE_Read_init32(&eeprom_data);
この場所のデータ FFFFFFFF
Plase、書き込んだデータをどのように確認できるか教えていただけますか?
ありがとうございます
Sakthivel k