Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions projects/etherkit_ethercat_cherryecat/board/ec_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
#endif

#ifndef CONFIG_EC_SCAN_STACKSIZE
#define CONFIG_EC_SCAN_STACKSIZE 2048
#define CONFIG_EC_SCAN_STACKSIZE 4096
#endif

#ifndef CONFIG_EC_SCAN_INTERVAL_MS
Expand All @@ -73,13 +73,23 @@
#endif

#ifndef CONFIG_EC_MAX_ENET_TXBUF_COUNT
#define CONFIG_EC_MAX_ENET_TXBUF_COUNT 10
#define CONFIG_EC_MAX_ENET_TXBUF_COUNT 8
#endif

#ifndef CONFIG_EC_MAX_ENET_RXBUF_COUNT
#define CONFIG_EC_MAX_ENET_RXBUF_COUNT 10
#define CONFIG_EC_MAX_ENET_RXBUF_COUNT 8
#endif

// #define CONFIG_EC_FOE

// #define CONFIG_EC_EOE

#ifndef CONFIG_EC_EOE_PRIO
#define CONFIG_EC_EOE_PRIO 1
#endif

#ifndef CONFIG_EC_EOE_STACKSIZE
#define CONFIG_EC_EOE_STACKSIZE 4096
#endif

#endif
83 changes: 1 addition & 82 deletions projects/etherkit_ethercat_cherryecat/configuration.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<option key="#pinconfiguration#" value="R9A07G084M04GBG.pincfg"/>
<option key="#FSPVersion#" value="2.2.0"/>
<option key="#ConfigurationFragments#" value="Renesas##BSP##Board##rzn2l_rsk##xspi0_x1_boot"/>
<option key="#SELECTED_TOOLCHAIN#" value="gcc-arm-embedded"/>
<option key="#SELECTED_TOOLCHAIN#" value="iar.arm.toolchain"/>
<option key="#ToolchainVersion#" value=""/>
</generalSettings>
<raBspConfiguration>
Expand Down Expand Up @@ -1046,86 +1046,6 @@
<property id="module.driver.timer.elc_trigger_mtu4" value="_disabled"/>
<property id="module.driver.timer.operation_select_mtu4" value="Disabled"/>
</module>
<module id="module.driver.timer_on_gpt.1352861500">
<property id="module.driver.timer.name" value="g_timer1"/>
<property id="module.driver.gpt.unit" value="0"/>
<property id="module.driver.gpt.channel" value="1"/>
<property id="module.driver.timer.mode" value="module.driver.timer.mode.mode_periodic"/>
<property id="module.driver.timer.period" value="1"/>
<property id="module.driver.timer.unit" value="module.driver.timer.unit.unit_period_usec"/>
<property id="module.driver.timer.duty_cycle" value="50"/>
<property id="module.driver.timer.gtioca_output_enabled" value="module.driver.timer.gtioca_output_enabled.false"/>
<property id="module.driver.timer.gtioca_stop_level" value="module.driver.timer.gtioca_stop_level.pin_level_low"/>
<property id="module.driver.timer.gtiocb_output_enabled" value="module.driver.timer.gtiocb_output_enabled.false"/>
<property id="module.driver.timer.gtiocb_stop_level" value="module.driver.timer.gtiocb_stop_level.pin_level_low"/>
<property id="module.driver.timer.count_up_source" value=""/>
<property id="module.driver.timer.count_down_source" value=""/>
<property id="module.driver.timer.phase_count_setting_automatically_enable" value="module.driver.timer.phase_count_setting_automatically_enable.disabled"/>
<property id="module.driver.timer.counting_mode" value="module.driver.timer.counting_mode.mode1"/>
<property id="module.driver.timer.start_source" value=""/>
<property id="module.driver.timer.stop_source" value=""/>
<property id="module.driver.timer.clear_source" value=""/>
<property id="module.driver.timer.capture_a_source" value=""/>
<property id="module.driver.timer.capture_b_source" value=""/>
<property id="module.driver.timer.gtioca_filter" value="module.driver.timer.gtioc_filter.gtioc_filter_none"/>
<property id="module.driver.timer.gtiocb_filter" value="module.driver.timer.gtioc_filter.gtioc_filter_none"/>
<property id="module.driver.timer.p_callback" value="g_timer1_callback"/>
<property id="module.driver.timer.ipl" value="board.icu.common.irq.priority10"/>
<property id="module.driver.timer.capture_a_ipl" value="_disabled"/>
<property id="module.driver.timer.capture_b_ipl" value="_disabled"/>
<property id="module.driver.timer.trough_ipl" value="_disabled"/>
<property id="module.driver.timer.gpt_sel.p_callback" value="NULL"/>
<property id="module.driver.timer.gpt_sel.overflow_interrupt_source" value=""/>
<property id="module.driver.timer.gpt_sel.capture_a_interrupt_source" value=""/>
<property id="module.driver.timer.gpt_sel.capture_b_interrupt_source" value=""/>
<property id="module.driver.timer.gpt_sel.trough_interrupt_source" value=""/>
<property id="module.driver.timer.gpt_sel.dead_time_error_interrupt_source" value=""/>
<property id="module.driver.timer.gpt_sel.int0_ipl" value="_disabled"/>
<property id="module.driver.timer.gpt_sel.int1_ipl" value="_disabled"/>
<property id="module.driver.timer.gpt_sel.int2_ipl" value="_disabled"/>
<property id="module.driver.timer.gpt_sel.int3_ipl" value="_disabled"/>
<property id="module.driver.timer.gpt_sel.int4_ipl" value="_disabled"/>
<property id="module.driver.timer.extra" value="module.driver.timer.extra.disabled"/>
<property id="module.driver.timer.poeg_link" value="module.driver.timer.poeg_link.poeg_link_poeg0"/>
<property id="module.driver.timer.output_disable" value=""/>
<property id="module.driver.timer.adc_trigger" value=""/>
<property id="module.driver.timer.dead_time_count_up" value="0"/>
<property id="module.driver.timer.dead_time_count_down" value="0"/>
<property id="module.driver.timer.adc_a_compare_match" value="0"/>
<property id="module.driver.timer.adc_b_compare_match" value="0"/>
<property id="module.driver.timer.interrupt_skip.source" value="module.driver.timer.interrupt_skip.source.none"/>
<property id="module.driver.timer.interrupt_skip.count" value="module.driver.timer.interrupt_skip.count.count_0"/>
<property id="module.driver.timer.interrupt_skip.adc" value="module.driver.timer.interrupt_skip.skip_sources.interrupt_skip.adc.none"/>
<property id="module.driver.timer.gtioca_disable_setting" value="module.driver.timer.gtioca_disable_setting.gtioc_disable_prohibited"/>
<property id="module.driver.timer.gtiocb_disable_setting" value="module.driver.timer.gtiocb_disable_setting.gtioc_disable_prohibited"/>
<property id="module.driver.timer.interrupt_skip_ext1.source" value="module.driver.timer.interrupt_skip_ext1.source.none"/>
<property id="module.driver.timer.interrupt_skip_ext1.count" value="module.driver.timer.interrupt_skip_ext1.count.count_0"/>
<property id="module.driver.timer.interrupt_skip_ext2.source" value="module.driver.timer.interrupt_skip_ext2.source.none"/>
<property id="module.driver.timer.interrupt_skip_ext2.count" value="module.driver.timer.interrupt_skip_ext2.count.count_0"/>
<property id="module.driver.timer.interrupt_skip_func.ovf" value="module.driver.timer.interrupt_skip_func.ovf.none"/>
<property id="module.driver.timer.interrupt_skip_func.unf" value="module.driver.timer.interrupt_skip_func.unf.none"/>
<property id="module.driver.timer.interrupt_skip_func.adc_a" value="module.driver.timer.interrupt_skip_func.adc_a.none"/>
<property id="module.driver.timer.interrupt_skip_func.adc_b" value="module.driver.timer.interrupt_skip_func.adc_b.none"/>
<property id="module.driver.timer.dead_time_error_ipl" value="_disabled"/>
<property id="module.driver.timer.input_capture" value="module.driver.timer.input_capture.enabled"/>
<property id="module.driver.timer.gtioc_isel" value="module.driver.timer.gtioc_isel.not_supported"/>
<property id="module.driver.timer.elc_trigger_llpp_event_a" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_b" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_c" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_d" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_e" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_f" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_g" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_llpp_event_h" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_a" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_b" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_c" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_d" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_e" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_f" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_g" value="_disabled"/>
<property id="module.driver.timer.elc_trigger_nonsafty_event_h" value="_disabled"/>
</module>
<context id="_hal.0">
<stack module="module.driver.ioport_on_ioport.0"/>
<stack module="module.bsp.memory_config.0"/>
Expand All @@ -1144,7 +1064,6 @@
</stack>
<stack module="module.driver.timer_on_gpt.1285445287"/>
<stack module="module.driver.timer_on_mtu3.1982797798"/>
<stack module="module.driver.timer_on_gpt.1352861500"/>
</context>
<config id="config.driver.ether_selector">
<property id="config.driver.ether_selector.param_checking_enable" value="config.driver.ether_selector.param_checking_enable.bsp"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ if(CONFIG_CHERRYECAT)
${CMAKE_CURRENT_LIST_DIR}/src/ec_coe.c
${CMAKE_CURRENT_LIST_DIR}/src/ec_common.c
${CMAKE_CURRENT_LIST_DIR}/src/ec_datagram.c
${CMAKE_CURRENT_LIST_DIR}/src/ec_eoe.c
${CMAKE_CURRENT_LIST_DIR}/src/ec_foe.c
${CMAKE_CURRENT_LIST_DIR}/src/ec_mailbox.c
${CMAKE_CURRENT_LIST_DIR}/src/ec_master.c
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,20 @@ CherryECAT is a tiny and beautiful, high real-time and low-jitter EtherCAT maste
- Support Slave SII access
- Support Slave register access
- Support multi master
- Support backup redundancy
- Minimum PDO cyclic time < 40 us (depends on master and slave hardware)
- Support multi cyclic time(every slave can use different proportional cyclic time)
- **Support backup redundancy(TODO)**
- **Minimum PDO cyclic time < 40 us (depends on master and slave hardware)**
- **DC jitter < 3us (depends on master and slave hardware)**
- **Support multi cyclic time(every slave can use different proportional cyclic time)**
- Support ethercat cmd with shell, ref to IgH

The pic shows dc jitter < 3us (hpm6800evk with flash_xip):
![ethercat](docs/assets/ethercat_dc.png)

## Hardware limitations

- **Master**
- CPU (cache > 16K, memcpy speed > 100MB/s)
- CPU (cache > 16K, **memcpy speed > 100MB/s**)
- ENET must support descriptor dma and iperf with lwip > 90 Mbps
- Code must run in ram, ignore if no dc
- Must support High-Precision Timer (jitter < 1us)
- Must support High-Precision timestamp (ARM DWT/RISC-V MCYCLE)
- Must support long long print
Expand All @@ -56,6 +59,7 @@ CherryECAT is a tiny and beautiful, high real-time and low-jitter EtherCAT maste
![ethercat](docs/assets/ethercat6.png)
![ethercat](docs/assets/ethercat7.png)
![ethercat](docs/assets/ethercat8.png)
![ethercat](docs/assets/ethercat9.png)

## Tool

Expand Down Expand Up @@ -108,4 +112,4 @@ QQ group: 563650597

## License

FOE,EOE and Backup redundancy features are available for commercial charge; other are free to use
FOE, EOE and backup redundancy features are available for commercial charge; other are free to use
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,20 @@ CherryECAT 是一个小而美的、高实时性、低抖动的 EtherCAT 主机
- 支持 Slave SII 读写
- 支持 Slave 寄存器读写
- 支持多主站
- 支持备份冗余
- 最小 PDO cyclic time < 40 us (实际数值受主站硬件和从站硬件影响)
- 支持多周期(每个从站可以使用不同的成比例的周期)
- **支持备份冗余(TODO)**
- **最小 PDO cyclic time < 40 us (实际数值受主站硬件和从站硬件影响)**
- **DC 抖动 < 3us (实际数值受主站硬件和从站硬件影响)**
- **支持多周期(每个从站可以使用不同的成比例的周期)**
- 支持 ethercat 命令行交互,参考 IgH

下图展示 dc 抖动 < 3us (hpm6800evk + flash_xip):
![ethercat](docs/assets/ethercat_dc.png)

## 硬件限制

- 主站
- CPU (cache > 16K, memcpy speed > 100MB/s)
- 以太网必须支持 descriptor dma 并且 iperf with lwip > 90 Mbps
- 代码必须跑在 ram 上,如果不使用 DC 同步则忽视
- 必须支持高精度定时器(抖动小于 1us)
- 必须支持高精度时间戳 (ARM DWT/RISC-V MCYCLE)
- 必须支持 64 位打印
Expand All @@ -56,6 +59,7 @@ CherryECAT 是一个小而美的、高实时性、低抖动的 EtherCAT 主机
![ethercat](docs/assets/ethercat6.png)
![ethercat](docs/assets/ethercat7.png)
![ethercat](docs/assets/ethercat8.png)
![ethercat](docs/assets/ethercat9.png)

## 工具

Expand Down Expand Up @@ -108,4 +112,4 @@ QQ group: 563650597

## License

FOE,EOE,备份冗余功能为商用收费,其余功能免费商用
FOE,EOE 以及备份冗余功能为商用收费,其余功能免费商用
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ src += Glob('src/ec_cmd.c')
src += Glob('src/ec_coe.c')
src += Glob('src/ec_common.c')
src += Glob('src/ec_datagram.c')
src += Glob('src/ec_eoe.c')
src += Glob('src/ec_foe.c')
src += Glob('src/ec_mailbox.c')
src += Glob('src/ec_master.c')
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
VERSION_MAJOR = 0
VERSION_MINOR = 1
VERSION_MAJOR = 1
VERSION_MINOR = 0
PATCHLEVEL = 0
VERSION_TWEAK = 0
EXTRAVERSION = 0
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@
#endif

#ifndef CONFIG_EC_SCAN_PRIO
#define CONFIG_EC_SCAN_PRIO 1
#define CONFIG_EC_SCAN_PRIO 10
#endif

#ifndef CONFIG_EC_SCAN_STACKSIZE
#define CONFIG_EC_SCAN_STACKSIZE 2048
#define CONFIG_EC_SCAN_STACKSIZE 4096
#endif

#ifndef CONFIG_EC_SCAN_INTERVAL_MS
Expand Down Expand Up @@ -80,4 +80,14 @@

// #define CONFIG_EC_FOE

// #define CONFIG_EC_EOE

#ifndef CONFIG_EC_EOE_PRIO
#define CONFIG_EC_EOE_PRIO 1
#endif

#ifndef CONFIG_EC_EOE_STACKSIZE
#define CONFIG_EC_EOE_STACKSIZE 4096
#endif

#endif

This file was deleted.

Loading
Loading