Feature | Module |
Dual Arm® Cortex®-R5F core example (1 core for motor control and EtherCAT each) for Dual-Servo Motor Drive reference design based on Universal Motor Control similar to other Sitara™ and C2000™ devices. | TIDEP-01032 EtherCAT-Connected Single-Chip Dual-Servo Motor Drive Reference Design |
Nikon A-format version 3.0 | Position Sense Nikon A-format |
Support for up to 8 encoders in bus connection | Position Sense Nikon A-format |
Refactor the examples, renamed the old example to snoop mode based example and added new examples for shadow mode which does not use snoop mode | Current Sense SDFM |
Phase Shift Example (PRU Based PWM Control) | PRU-ICSS PWM |
Enabled configuration of IEP1 independently | PRU-ICSS PWM |
Time Transmitter Receiver Example | Time Sync |
Time Receiver Example (Supported only in debug mode) | Time Sync |
SFRA Library | Real Time Libraries |
Datalog Library and Example | Real Time Libraries |
Independent IEP events for each axis in load share mode | Position Sense BiSS-C |
Independent IEP events for each axis in load share mode | Position Sense Nikon A-format |
SAMUX mode configuration from SysConfig | Position Sense |
TX/RX clock source configuration from SysConfig | Position Sense |
Developer Guides for PRU resource allocation and PRU-ICSSG IO Modes | Developer Guides |
Debug Guides for different components | Developer Guides |
Module | Supported CPUs | SysConfig Support | OS Support | Key features tested | Key features not tested |
BiSS-C | R5F | YES | FreeRTOS, NORTOS | Single channel, Multi channel using single PRU core and three PRU cores (load share mode),point-to-point connection, control communication, automatic processing delay detection and compensation, interface speed of 1, 2, 5, 8, and 10 MHz, long cable (upto 100 meters), continuous mode, BP-AM2BLDCSERVO Boosterpack with LP-AM243 | Daisy chaining, safety mode (safety CRC and sign-of-life counter) |
EnDat | R5F | YES | FreeRTOS, NORTOS | Single channel, Multi channel using single PRU core and three PRU cores (load share mode), recovery time for 2.2 command set, interface speed of 4, 8 and 16 MHz, long cable (upto 100 meters), continuous mode, BP-AM2BLDCSERVO Boosterpack with LP-AM243 | Encoder receive communication command |
HDSL | R5F | YES | FreeRTOS, NORTOS | Single channel, Multi channel using three PRU cores (load share mode), Free Run mode, Sync mode, Short Message Read and Write, Long Message Read and Write, Pipeline Channel Data, Long cable (upto 100 meters) with single channel Free Run mode, BP-AM2BLDCSERVO Boosterpack with LP-AM243, 225 MHz PRU firmware | Long cable (upto 100 meters) with sync mode |
Nikon A-format | R5F | YES | FreeRTOS, NORTOS | Nikon A-format version 2.1 and version 3.0, Single channel, Multi channel using single PRU core and three PRU cores (load share mode), point-to-point connection, bus connection up to 8 encoders, individual and multiple transmission mode with encoder addresses ranging between ENC1-ENC8, baud rates from 2.5 MHz, 4 MHz, 6.67 MHz, 8 MHz, and 16 MHz, up to 40-bit absolute position (single turn + multi turn) data with additional information, long cable (upto 100 meters), continuous mode, BP-AM2BLDCSERVO Boosterpack with LP-AM243 | - |
Tamagawa | R5F | YES | FreeRTOS, NORTOS | Single channel, Multi channel using single PRU core, absolute position, encoder ID, reset, EEPROM read, EEPROM write, 2.5 Mbps Encoder, continuous mode, BP-AM2BLDCSERVO Boosterpack with LP-AM243 | 5 Mbps encoder |
Module | Supported CPUs | SysConfig Support | OS Support | Key features tested | Key features not tested |
Control | R5F | YES | FreeRTOS, NORTOS | Field Weakening Control, Maximum Torque Per Ampere, Strator voltage frequency generator support | - |
Digital Control Library (DCL) | R5F | YES | FreeRTOS, NORTOS | Linear PI, Linear PID, Linear PI with double integrator (PI2), Direct Form 1 (first order), Direct Form 1 (second order), Direct Form 1 (third order), Direct Form 2 (second order), Direct Form 2 (third order), Non-linear PID controller | - |
Observer | R5F | YES | FreeRTOS, NORTOS | Sensored eQEP-based encoder, Hall sensor, Sensorless Enhanced Sliding Mode Observer, both speed measurement for sensored (speedcalc) and sensorless (speedfr) | - |
SFRA | R5F | YES | FreeRTOS, NORTOS | Software Frequency Response Analyzer support | - |
Transforms | R5F | YES | FreeRTOS, NORTOS | Clarke transformation, Park transformation, Inverse Park transformation, Space Vector Generation (SVGEN), Common-mode subtraction approach, DPWM Generation (Part of SVGEN), Maximum Modulation, Minimum Modulation, SVGEN current reconstruction for single-shunt (SVGENCURRENT), Phase voltage reconstruction in overmodulation (VOLTS_RECON) | - |
Utilities | R5F | YES | FreeRTOS, NORTOS | Angle Compensation Generator, Step Response, Datalog, Trapezoid generator | - |
ID | Head Line | Module | Applicable Releases | Resolution/Comments |
PINDSW-5537 | HDSL not working with 225 MHz PRU-ICSSG Core Clock Frequency | Position Sense HDSL | 9.0 onwards | - |
PINDSW-6544 | SDFM: Incorrect samples seen intermittently with EPWM as SDFM clock | Current Sense SDFM | 9.0 onwards | Use new example with shadow register based normal current sampling. This is a limitation of snoop mode based normal current sampling. |
PINDSW-7976 | PRUICSS PWM : validation of number of pwm channels and pwm trip zone blocks are not correct in sysconfig | PRUICSS PWM | 9.1 onwards | - |
PINDSW-8042 | ReferenceDesign: Firmware binary path included multiple times | Reference Design | 9.0 onwards | - |
PINDSW-8087 | Tamagawa: UART clock source is used for TX fifo | Position Sense Tamagawa | 9.0 onwards | - |
PINDSW-8220 | Endat: Initialization clock is not 200 kHz when the clock source does not run at 192 MHz | Position Sense EnDat | 9.0 onwards | - |
PINDSW-8399 | EnDat: Implement the recovery time as specified in section 3.3 of "Heidenhain Document D1128897-03-A-02.8: Safety with EnDat 2.2 and Non-Safe EnDat Master" | Position Sense EnDat | 9.0 onwards | - |
PINDSW-8415 | SDFM: Incorrect samples observed when individual clock option is used | Current Sense SDFM | 9.0 onwards | Use new example with shadow register based normal current sampling. This is a limitation of snoop mode based normal current sampling. |
PINDSW-8564 | EnDat: endat_recvd_process function does not handle when different types of encoders are connected | Position Sense EnDat | 9.0 onwards | - |
PINDSW-9123 | Nikon: Data reversal not done correctly for EEPROM and ID commands | Position Sense Nikon A-format | 9.2 onwards | Fixes done in nikon_update_eeprom_addr, nikon_update_eeprom_data, nikon_update_id_code and nikon_get_pos |
PINDSW-9124 | Nikon: Data reversal not done correctly for encoder status received in response | Position Sense Nikon A-format | 9.2 onwards | Fixes done in nikon_get_pos |
PINDSW-9127 | Nikon: For commands 8 to 12, 9 requests are sent instead of 8 | Position Sense Nikon A-format | 9.2 onwards | Fixes done in nikon_get_pos |
PINDSW-9128 | Nikon: For EEPROM commands, request is sent 2 times from firmware | Position Sense Nikon A-format | 9.2 onwards | Fixes done in nikon_get_pos, and updates in the application code for EEPROM command handling |
PINDSW-9131 | Nikon: EEPROM read for temperature does not use 10 bit data | Position Sense Nikon A-format | 9.2 onwards | Fixes done in nikon_get_pos, and updated the application code for EEPROM command handling |
PINDSW-9144 | Nikon: For EEPROM/ID commands, same data is used for all channels in multi-channel mode | Position Sense Nikon A-format | 9.2 onwards | Added provision for different address/data per channel |
PINDSW-9154 | Nikon: CRC error seen with 16 Mbps in Single PRU Multi-channel mode | Position Sense Nikon A-format | 9.2 onwards | - |
PINDSW-9180 | Nikon: 10 us delay between CDF-MDF and MDF-MDF is used for commands needing MDF | Position Sense Nikon A-format | 9.2 onwards | - |
PINDSW-9238 | Nikon: IEP compare value is not set correctly for continuous mode | Position Sense Nikon A-format | 9.2 onwards | Change the units to IEP clock cycle count |
PINDSW-9239 | Nikon: nikon_config_periodic_trigger assumes fixed receive size of response | Position Sense Nikon A-format | 9.2 onwards | Remove receive size hard-coding in driver |
PINDSW-9248 | EnDat: RX arm delay and TST delay settings are hard-coded for a 200 MHz core clock | Position Sense EnDat | 9.2 onwards | - |
PINDSW-9255 | Nikon: If Debug log/scan is removed and encoder resolution is fixed in application code, initialization fails | Position Sense Nikon A-format | 9.2 onwards | Add 0.5 seconds delay in application after powering up the encoder |
PINDSW-9292 | SDFM: Fast Detect only works if the Fast Detect option is enabled for channel 0 | Current Sense SDFM | 9.0 onwards | - |
PINDSW-9312 | Nikon: Data type of velocity and acceleration is unsigned integer | Position Sense Nikon A-format | 9.2 onwards | - |
PINDSW-9317 | BiSS-C: bissc_update_data_len does not set number of encoders correctly | Position Sense BiSS-C | 9.2 onwards | - |
PINDSW-9385 | EnDat: Recovery time does not work with EnDat 2.2 supplementary commands for certain EnDat frequencies | Position Sense EnDat | 9.2 onwards | - |
PINDSW-9406 | EnDat/Nikon: Channel 2 does not work on PRU Slice 0 in load share mode | Position Sense EnDat, Position Sense Nikon | 9.0 onwards | - |
PINDSW-9501 | BiSS-C/Nikon: Synchronization in load share fails in certain cases due to race condition | Position Sense BiSS-C, Position Sense Nikon | 9.1 onwards | - |
This section lists changes which could affect user applications developed using older SDK versions. Read this carefully to see if you need to do any changes in your existing application when migrating to this SDK version relative to previous SDK version. Also refer to older SDK version release notes to see changes in earlier SDKs.
Module | Affected API | Change | Additional Remarks |
Current Sense SDFM | SdfmPrms_s | Added variable: snoopModeEnable | - |
Example icss_sdfm_nine_channel_load_share_snoop_mode | Renamed the example name from icss_sdfm_nine_channel_load_share_mode to icss_sdfm_nine_channel_load_share_snoop_mode , Changed the INTC mapping between host channels and PRU events | This change identifies the sampling mode between Normal mode and Snoop mode. INTC mapping info is available at SDFM INTC Mapping |
Example icss_sdfm_three_channel_single_pru_snoop_mode | Renamed the example name from icss_sdfm_three_channel_single_pru_mode to icss_sdfm_three_channel_single_pru_snoop_mode , Changed the INTC mapping between host channel and PRU event | This change identifies the sampling mode between Normal mode and Snoop mode. INTC mapping info is available at SDFM INTC Mapping |
Example icss_sdfm_nine_channel_load_share_mode | Normal mode for sampling is used | To demonstrate shadow mode-based sampling, it uses Normal mode for sampling. |
Example icss_sdfm_nine_channel_with_continuous_mode | Made Normal mode the default mode for sampling, and individual interrupt is used for all channels | Updated the callback function to read sample data. INTC mapping info is available at SDFM INTC Mapping |
Example icss_sdfm_three_channel_single_pru_mode | Normal mode for sampling is used | To demonstrate shadow mode-based sampling, it uses Normal mode for sampling. |
Example icss_sdfm_three_channel_with_continuous_mode | Made Normal mode the default mode for sampling, and individual interrupt is used for all channels | Updated the callback function to read sample data. INTC mapping info is available at SDFM INTC Mapping |
Example icss_sdfm_three_channel_with_phase_compensation | Made Normal mode the default mode for sampling, Changed the INTC mapping between host channel and PRU event | INTC mapping info is available at SDFM INTC Mapping |
Position Sense BiSS-C | bissc_process_periodic_command() | Updated input parameters for the API cmp0 -> iep_reset_count, cmp3 -> ch0_trigger_count and added new parameters ch1_trigger_count, ch2_trigger_count | Change affects multi channel load share example |
bissc_periodic_interface_init() | Updated input parameters for the API cmp0 -> iep_reset_count, cmp3 -> ch0_trigger_count and added new parameters ch1_trigger_count, ch2_trigger_count | Change affects multi channel load share example |
structure bissc_periodic_interface | updated parameters for the structure cmp0 -> iep_reset_count, cmp3 -> ch0_trigger_count and added new parameters ch1_trigger_count, ch2_trigger_count | Change affects multi channel load share example |
pruBisscIrqHandler() | Updated API name | Change affects multi channel load share example |
txpruBisscIrqHandler() | Added new API Method for handling interrupt from txpru | Change affects multi channel load share example |
rtuBisscIrqHandler() | Added new API Method for handling interrupt from rtu | Change affects multi channel load share example |
PRU_TRIGGER_HOST_EVT,RTU_TRIGGER_HOST_EVT,TXPRU_TRIGGER_HOST_EVT | Updated PRU_TRIGGER_HOST_BISSC_EVT0,PRU_TRIGGER_HOST_BISSC_EVT1,PRU_TRIGGER_HOST_BISSC_EVT2 host event macro names | Change affects multi channel load share example |
Position Sense Endat | structure endat_periodic_interface | Renamed the cmp event variables | Renamed variables: cmp0 to cmp0_count , cmp3 to ch0_trigger_count , cmp5 to ch1_trigger_count , and cmp6 to ch2_trigger_count |
Firmware binary files | Renamed all binary files | Used encoder_receiver inclusive term |
Position Sense Nikon A-format | nikon_process_periodic_command() | Updated input parameters for the API cmp0 -> iep_reset_count, cmp3 -> ch0_trigger_count & added new parameters ch1_trigger_count & ch2_trigger_count | Change affects multi channel load share example |
nikon_periodic_interface_init() | Updated input parameters for the API cmp0 -> iep_reset_count, cmp3 -> ch0_trigger_count & added new parameters ch1_trigger_count & ch2_trigger_count | Change affects multi channel load share example |
structure nikon_periodic_interface | updated parameters for the structure cmp0 -> iep_reset_count, cmp3 -> ch0_trigger_count & added new parameters ch1_trigger_count & ch2_trigger_count | Change affects multi channel load share example |
pru_nikon_irq_handler() | Updated API name | Change affects multi channel load share example |
txpru_nikon_irq_handler() | Added new API Method for handling interrupt from txpru | Change affects multi channel load share example |
rtu_nikon_irq_handler() | Added new API Method for handling interrupt from rtu | Change affects multi channel load share example |
PRU_TRIGGER_HOST_EVT,RTU_TRIGGER_HOST_EVT,TXPRU_TRIGGER_HOST_EVT | Updated PRU_TRIGGER_HOST_NIKON_EVT0,PRU_TRIGGER_HOST_NIKON_EVT1,PRU_TRIGGER_HOST_NIKON_EVT2 host event macro names | Change affects multi channel load share example |
Multiple variables | Refactor code to avoid unsigned to signed and signed to unsigned conversion | - |
Position Sense Tamagawa | Firmware binary files | Renamed all binary files | Used encoder_receiver inclusive term |
structure tamagawa_periodic_interface | Renamed the cmp event variables | Renamed variables: cmp0 to iep_reset_count , cmp3 to periodic_trigger_count |
Real Time Libraries | - | Moved examples/dcl, examples/sfra, examples/transforms, examples/utilities to examples/rtlibs folder | All examples using Real Time Libraries are updated to use new path |
Reference Design | Project for TIDEP-01032 EtherCAT-Connected Single-Chip Dual-Servo Motor Drive Reference Design | Refactored the software and FOC implementation based on universal motor control, similar to other Sitara™ and C2000™ devices. | - |
Module | Affected API or structure | Change | Additional Remarks |
Current Sense SDFM | SDFM_Ctrl | Added variable: sdfm_en_snoop_nc | - |
SDFM_setFilterOverSamplingRatio | Added input parameter: channel | Take current channel number as input parameter |
Position Sense BiSS-C | structure bissc_priv | Added variable tx_rx_clock_source | Needed for configuring clock source selection |
API bissc_init | Added input parameter tx_rx_clock_source | Needed for configuring clock source selection |
Position Sense Endat | structure endat_priv | Added new variables: pru_uart_clock , pru_clock , rx_clock_source and tx_clock_source | - |
structure endat_init | Added new parameter: endat_clock_config | - |
structure endat_priv | Renamed variables: cmp0 to iep_reset_count , cmp3 to ch0_trigger_count , cmp5 to ch1_trigger_count , and cmp6 to ch2_trigger_count | - |
structure cmd_supplement | Renamed variables: cmp0 to iep_reset_count , cmp3 to ch0_trigger_count , cmp5 to ch1_trigger_count , and cmp6 to ch2_trigger_count | - |
structure Endat_ChRxInfo | Added new variables: struct Endat_ChRTInfo and Removed variables: resvdInt2 , resvdInt3 and recoveryTime | - |
structure pruss_xchg | Added new variables: enableRTM | - |
Position Sense Nikon A-format | structure pos_data_info | Added variables raw_data4 , raw_data5 , velocity and acc | Needed for Nikon A-format version 3.0 |
structure alm_bits | Added variables ov_spd_s , st_err_s , ps_err_s , busy_s and inc_err_s | Needed for Nikon A-format version 3.0 |
structure alm_bits | Updated variable inc_err 's name to inc_err | Updated as per Nikon A-format version 3.0 |
structure nikon_priv | Added parameters tx_rx_clock_source and protocol_version | Needed for configuring clock source selection and specifying protocol version respectively |
structure nikon_priv | Updated parameter tx_mdf | Updated the variable type from uint32_t to 2D array of type uint32_t to store different tx_mdf data for each channel and each MDF
|
structure nikon_priv | Updated parameter mem_data | Updated the variable type from 1D array of type uint32_t to 2D array of type uint32_t to store different mem_data data for each channel and each MDF |
structure nikon_priv | Added variable velocity_coefficient , pm_alm_field , and bank_error | Needed for Nikon A-format version 3.0 |
API nikon_init | Added input parameters tx_rx_clock_source and protocol_version | Needed for configuring clock source selection and specifying protocol version respectively |
structure nikon_pruicss_xchg | Updated parameter mdf_frame | Updated the variable type from 1D array of type uint32_t to 2D array of type uint32_t to store different mdf_frame data for each channel and each MDF |
structure nikon_pruicss_xchg | Added parameter num_mdf | It stores the number of MDFs to be sent |
structure nikon_pruicss_xchg | Removed delay_300us , delay_30ms , delay_10us and added delay_1us | 300 us, 30 ms and 10 us delay values are not needed in firmware. 1 us is needed for delay between CDF and MDFs. |
structure nikon_pruicss_xchg | Renamed variable icssg_clk to icss_clk | - |
API nikon_get_pos | CRC is not removed while copying data into last raw data byte for all commands (priv->pos_data_info[ch].raw_data<x>[enc_num] ) | - |
APIs nikon_get_pos, nikon_init, nikon_generate_cdf, nikon_reverse_bits, nikon_config_load_share | Refactor code to avoid unsigned to signed and signed to unsigned conversion. Update the data type of function arguments. | - |
APIs nikon_update_eeprom_addr, nikon_update_eeprom_data, nikon_update_id_code | Add channel as function argument, and update the data type based on bit width needed for address, data, and ID code | - |
Position Sense Tamagawa | tamagawa_priv | Added new variable: pru_clock | - |
tamagawa_clk_cfg | Added new variables: rx_clk_source , tx_clk_source and rx_os_rate | - |
tamagawa_priv | Added new variables: pru_uart_clock , rx_clock_source" and tx_clock_source` | -
|
tamagawa_priv | Renamed variables: cmp0 to iep_reset_count , cmp3 to periodic_trigger_count | - |
PRUICSS PWM | structure PRUICSS_PWM_IEP_Attrs_s | Added variables : iep1IncrementValue , enableIep1 , enableIep1ResetOnEpwm0_Sync , enableIep1ResetOnEpwm3_Sync , enableIep1ResetOnCompare0 , enableIEP1ShadowMode | - |
API PRUICSS_PWM_iepConfig | Updated definition enabling configuration of IEP1 independently | - |
Real Time Libraries | - | Moved source/control, source/dcl, source/observers, source/sfra, source/transforms, source/utilities to source/rtlibs folder | All examples using Real Time Libraries are updated to use new path |