- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
PSoC4100SPlusでEmulatedEEPROMを使用したいとの要望があり、サンプルプログラムを探しています。
下記WebページのCE95313がEEPROMのサンプルプログラムとなっているのですが、
https://www.cypress.com/documentation/code-examples/psoc-345-code-examples
リンクが切れているようです。
下記のような表示となります。
https://www.cypress.com/?rid=105775
このサンプルソフトの提供をお願いします。
また、Webのリンク切れの修正もお願いします。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
Code Example of EmulatedEEPROM for PSoC4は下記リンクにもございます。
CE195313 PSoC Emulated EEPROM
https://www.cypress.com/documentation/code-examples/ce195313-psoc-emulated-eeprom
上記CEをCY8CKIT-149 (PSoC4100S Plus)で動作させたプロジェクトを添付いたします。
参考にしてください。
尚、https://www.cypress.com/documentation/code-examples/psoc-345-code-examples内のCE95313のリンクに付きましては調査致します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
こんにちは、
以前、5LP のフォーラムでEm_EEPROMに書込んだデータを Em_EEPROM のアドレスの先頭が読むと
値が違うと質問用に作成したサンプルをPSoC 4に移植してみました。
基板は CY8CKIT-149 (CY8C4147AZI-S475) を使用しました。
Em_EEPROM を使用する場合、回路図に Em_EEPROM のコンポーネントを置いてサイズを設定した後に
(1) 一度アプリケーションをジェネレートして、生成されたリンカースクリプト cm0plusgcc.ld を
変更用に custom_cm0plusgcc.ld 等にコピー後、
_etext = .;
} >rom
という行の後に
EM_EEPROM_START_ADDRESS = <FLASH上のEmEEPROMの開始アドレス>
.my_emulated_eeprom EM_EEPROM_START_ADDRESS :
{
KEEP(*(.my_emulated_eeprom))
} >rom
という文を追加する必要があります。
今回試しに使用した CY8CKIT-149 では FLASH は 128KB ありましたので、
ラスト 1/4 を Em_EEPROM 用にと考えて 先頭アドレスを 96KB (= 0x18000) として
下記の様に変更しました。
.
その後、Project > Build Settings > Linker の Custom Linker Script に作成した custom_cm0plusgcc.ld を登録します。
後は main.c を下記の様に書いて
==================
#include "project.h"
#include "stdio.h"
/**
* According to the Datasheet of Em_EEPROM
* linker script file
* \<em_eepromproject_name>.cydsn\Generated+Source\PSoC(4)(5)\cm3gcc.ld
* needs to be copied to a custom linker script, like custom_cm3gcc.ld
* and in the custom_cm3gcc.ld following lines must be added after
* the line of
.cy_checksum_exclude : { KEEP(*(.cy_checksum_exclude)) } >rom
*
EM_EEPROM_START_ADDRESS = <EEPROM Address>;
.my_emulated_eeprom EM_EEPROM_START_ADDRESS :
{
KEEP(*(.my_emulated_eeprom))
} >rom
* where, <EEPROM Address> is the start address of EEPROM part in the
* flash rom. As CY8C4147AZI-S475, I assined 0x18000 (which is 96KB point).
* Then from Build Settings > Linker > General
* Custom Linker Script: .\Generated_Source\PSoC5\custom_cm3gcc.ld
*/
// const uint8 store[Em_EEPROM_PHYSICAL_SIZE]
// CY_SECTION(".my_emulated_eeprom") __ALIGNED(CY_FLASH_SIZEOF_ROW) = { 0u } ;
const uint8_t store[Em_EEPROM_PHYSICAL_SIZE]
CY_SECTION(".my_emulated_eeprom") __ALIGNED(CY_FLASH_SIZEOF_ROW) = { 0u } ;
cy_en_em_eeprom_status_t status ;
char str[128] ; /* print buffer */
void print(char *str)
{
UART_UartPutString(str) ;
}
void print_em_eprom_error(cy_en_em_eeprom_status_t status)
{
switch(status) {
case CY_EM_EEPROM_SUCCESS: print("No Error\n") ; break ;
case CY_EM_EEPROM_BAD_PARAM: print("The input parameter is invalid\n") ; break ;
case CY_EM_EEPROM_BAD_CHECKSUM: print("The data in EEPROM is correupted\n") ; break ;
case CY_EM_EEPROM_BAD_DATA: print("Failed to place the EEPROM in flash\n") ; break ;
case CY_EM_EEPROM_WRITE_FAIL: print("Write to EEPROM failed\n") ; break ;
default:
sprintf(str, "EEPROM Unknown Error %d\n", status) ;
print(str) ;
break ;
}
}
void init_hardware(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
UART_Start() ;
status = Em_EEPROM_Init((uint32_t)store) ;
if (status != CY_EM_EEPROM_SUCCESS) {
print_em_eprom_error(status) ;
}
}
void splash(void)
{
sprintf(str, "Emulated EEPROM Test (%s %s)\n", __DATE__, __TIME__) ;
print(str) ;
}
int main(void)
{
unsigned int i ;
unsigned int test_size = 16 ;
uint8 zustand[Em_EEPROM_EEPROM_SIZE] = {} ;
init_hardware() ;
splash() ;
sprintf(str, "EEPROM SIZE = %d\n", Em_EEPROM_EEPROM_SIZE) ;
print(str) ;
print("Store:\n") ;
for (i = 0 ; i < test_size * 2 ; i++ ) {
sprintf(str, "%02X ", store) ;
print(str) ;
if (i == 0xF) {
print("\n") ;
}
}
print("\n") ;
print("Values to be written:\n") ;
for (i = 0 ; i < test_size ; i++) {
zustand = 0xF0 + i ;
sprintf(str, "%02X ", zustand) ;
print(str) ;
}
print("\n") ;
CyDelay(10) ;
status = Em_EEPROM_Write((uint32)0, (void*)zustand, test_size) ;
if (status != CY_EM_EEPROM_SUCCESS) {
print_em_eprom_error(status) ;
}
print("Store:\n") ;
for (i = 0 ; i < test_size * 2 ; i++ ) {
sprintf(str, "%02X ", store) ;
print(str) ;
if (i == 0xF) {
print("\n") ;
}
}
print("\n") ;
for (i = 0 ; i < test_size ; i++ ) {
zustand = 0 ;
}
status = Em_EEPROM_Read((uint32)0, zustand, test_size) ;
if (status != CY_EM_EEPROM_SUCCESS) {
print_em_eprom_error(status) ;
}
print("Values read:\n") ;
for (i = 0 ; i < test_size ; i++ ) {
sprintf(str, "%02X ", zustand) ;
print(str) ;
}
print("\n") ;
for(;;)
{
/* Place your application code here. */
}
}
==================
実行してみたところ、Tera Term への出力は下記の様になりました。
尚、Store として Em_EEPROM に使用されているメモリの先頭から 32 byte をダンプしていますが、
実際の値の書込みは 13 byte目くらいから始まっていて、それまでの領域は Em_EEPROM の管理に
使用されているのがわかるというデモだったのですが、実使用上は
Values to be written と Values read という行の処理だけで十分ですね。
以上、ご参考になれば幸いです。
moto
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
Code Example of EmulatedEEPROM for PSoC4は下記リンクにもございます。
CE195313 PSoC Emulated EEPROM
https://www.cypress.com/documentation/code-examples/ce195313-psoc-emulated-eeprom
上記CEをCY8CKIT-149 (PSoC4100S Plus)で動作させたプロジェクトを添付いたします。
参考にしてください。
尚、https://www.cypress.com/documentation/code-examples/psoc-345-code-examples内のCE95313のリンクに付きましては調査致します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ありがとうございました。
Webのリンクもお願い致します。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
https://www.cypress.com/documentation/code-examples/psoc-345-code-examples
内のEmulated EEPROM Code Exampleへのリンクが修正されました。
また、CE番号も修正されました。
CE195313で検索してください。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ありがとうございました。