cifX-Toolkit Version History: ============================= V2.8.0.1 ----------------- - Added missng ulOption parameter in SerialDPM example functions (Read_NXxx / Write_NXxx) V2.8.0.0 ----------------- - Added chip-type verfication for firmware download - Added new compile time option CIFX_TOOLKIT_USE_CUSTOM_DRV_FUNCS - Added license information - Update HILDEF headers to version 20230403-00 - Fixed error/rejection during NXS firmware download - Fixed issue which only allowed a COLDSTART when APP-CPU and IDPM was used - Fixed file upload for empty files (file size = 0) - Fixed issue regarding unaligned access to the DPM V2.7.3.0 ----------------- - Added new option and functions to enable cached I/O buffer access for PLC functions Modified and extended OS functions: OS_MapUserPointer()/OS_FlushCacheMemory_ToDevice()/OS_InvalidateCacheMemory_FromDevice() Modified and extended USER and CIFX API functions: USER_GetCachedIOBufferMode() / xChannelPLCMemoryPtr() - Updated 2nd Stage Loader to V1.8.0.0 V2.7.2.0 ----------------- - Fixed xSysdeviceResetEx() to allow passing of additional flags to underlying functions V2.7.1.0 ----------------- - Fixed reset parameter and flag masking, before writing them to the ulSystemControl value in the DPM - Update HilscherDefinitions to version 20220112-00 V2.7.0.0 ----------------- - Fixed missing return of ulState packet errors in cifXReadFirmwareIdent() - Removed "\r\n" from trace strings - Fix netX51 detection during startup - Make CRC32 function public - Unify OS_* functions in API header and supplied template implementation - Change prototype of OS_Time() to support 64bit time values - Update HilscherDefinitions to version 20211110-00 - Update cifXAPI to version 20210908-00 - Fixed GCC compiler warnings (unaligned pointer value from packed member address of a struct or union) - Optimize DSR function by minimizing hardware accesses V2.6.0.0 ----------------- - Changed type of bIrqNumber from uint8_t to uint32_t V2.5.1.0 ----------------- - Fixed reset handling to update handshake flag state when device is in interrupt mode - Update HilscherDefinitions to version 20200514-01 V2.5.0.0 ----------------- - xDriverEnumBoards() now returns CIFX_NO_MORE_ENTRIES, if actual board count is exceeded - Fix CIFX_DMA_STATE_GETSTATE define in DEV_DMAState() V2.4.0.0 ----------------- - Fixed Firmware update via xSysdeviceResetEx() if executed on APP CPU - Big Endian fixes including possible unexpected values when performing write access using xChannelControlBlock(). xChannelCommonStatusBlock() and xChannelControlBlock() shall only be called with offset '0' on big endian targets - Increase timeout during updatestart handling for jump to firmware (netX90/netX4000) - Simultanious access to handshake flags may lead to loss of latest Change-Of-State flags - Update HilscherDefinitions to version 20191108-00 - Update cifX API headers to version 20191108-00 - Updated 2nd Stage Loader to V1.6.0.1 V2.3.0.0 ----------------- - Update PCI IDs for CIFX M2 devices V2.2.0.0 ----------------- - Detection of newer netX90 chip revisions fails - xSysdeviceFindFirstFile() does not check for last packet or packet length=0 - Missing HWIF function around mailbox counter access in xChannelRegisterNotification() - SerialDPM initialization fails if the first detected interface is SERDPM_UNKNOWN V2.1.0.0 ----------------- - Add DEV function for ResetEx modes - Prevent DPM access during resets for netX4000 based PCI devices V2.0.1.0 ----------------- - Using hilscher standard definition files - netX90 / netX4000 device support added (flash based devices) - Support download of netX90/netX4000 firmware (update) files - Rework chip type detection - Add new API function xSysdeviceResetEx() V1.6.0.0 ----------------- - Fixed ulCopySize calculation in DEV_CheckForDownload() V1.5.0.0 ----------------- - Updated 2nd Stage Loader to V1.6.0.0 - Fixed delete of existing files in all channels if a new firmware is loaded (DEV_RemoveChannelFiles() was only called with channel 0) - Fixed DEV_RemoveChannelFiles() "Find First File" iteration does not reset the internal data on each new iteration - Fixed LINT warning in toolkit c modules - Fixed USER_xxx function prototypes in cifXToolkit.h to match implementation - Extended template file TKitUser_Custom.c by missing USER_GetDMAMode() function - Fixed warnings when compiling the toolkit with gcc compiler - Added "const" keyword to CrC32Table[] definition in cifXDownload.c, so the table can be stored in .rodata when used in an emdedded system - Changed SPM / HWIF example implementation to use the DEVICEINSTANCE pointer instead of the pvOSDependent pointer - Added OS_SpiInit() OS_SPILock() and OS_SPIUnlock() functions to SPM function interface - Added locking mechanism for SPM read/write functions to prevent overlapped fucntion calls - Changed the default firmware startup timeout definition CIFX_TO_FIRMWARE_START from 10 to 20 seconds - Improved return value checking (e.g. malloc) during hardware initiaization in cifXInit() - xChannelBusState() / CIFX_BUS_STATE_GETSTATE now updates the COS flags to be able to call the function in a loop and to get an updated state - Fixed internal check handle functions CheckSysdeviceHandle()/CheckChannelHandle() to be usable also during system start - Added more error descriptions for xDriverErrorDescripton() - Added additional check for system channel READY before accessing it V1.4.0.0 ----------------- - Improved ISR handler by reading only necessary handshake registers on PCI cards - Fixed LINT warning in DEV_DoSystemStart(), multiple definition of ptSysChannel - Fixed LINT warning by adding type casts - Fixed xSysdeviceInfo()/CIFX_INFO_CMD_SYSTEM_CHANNEL_BLOCK for use with SPM, removed access via the "DPM pointer" - Fixed xSysdeviceExtendedMemory() missing convert/HWIF function when reading tSystemState - Renamed "md5" files to "Hilmd5" preventing conflicts with custom components using same file name - xChannelIORead()/xChannelIOWrite() does not return COM flag state in "uncontrolled mode" - DEV_IsCommunicating() removed re-read of NCF_Handshake flags for SPM speed improvment V1.3.0.0 ----------------- - Fixed DSR Handler channel loop counting preventing one additional iteration - Fixed compiler warnings created by implicit data conversion on 64bit systems - Fixed Lint warnings in cifXInit.c - Fixed notification call "post reset event" (eCIFX_TOOLKIT_EVENT_POSTRESET) done to late - Added system state trace log information (e.g. DPM cookie) during start-up - Added include in cifXUser.h surrounding <#if _MSC_VER> allowing none Microsoft compiler using -wundef V1.2.0.1 ----------------- - Remove single line comment (not allowed in ANSI-C) V1.2.0.0 ----------------- - Changed function interface of the hardware read/write functions (PFN_HWIF_MEMCPY). Using void pointer instead of uint32_t for address parameter, skips address calculation for memory mapped devices on 64bit systems. - xChannelSyncState() may not work on flash-based devices (if no reset is done during initialization) or after xSysdeviceReset() - Added target independent protocol implementation for serial DPM handling - xChannelRegisterNotification/CIFX_NOTIFY_COM_STATE now calls always the user callback to signal the actual COM flag state - Interrupt mode with shared PCI interrupts may result in invalid flags being handled in seldom cases - Added support for IAR C/C++ Compiler (ARM Cores only) - Added support for armcc Compiler (previously known as ARM RealView) - Always check cookie before evaluation of READY flag to prevent misinterpretation of invalid DPM content - Updated 2nd Stage Loader to V1.4.17.0 - Introduced eCHIP_TYPE_NETX52 to distinguish between netX51 and netX52 - Introduced initial wait for bootloader startup before invoking POST_BOOTLOADER event - Mailbox notification may cause illegal memory access due to missing hardware interface abstraction and endianness conversion - DMA mode does not work properly on big endian machines due to missing endianness conversion V1.1.5.0 ----------------- - DEV_TransferPacket() may drop unexpected packets - DEV_WaitForBitstate_Poll / DEV_WaitForSynchState_Poll may wait one additional cycle before returning - netX51/52 RAM Based device support ATTENTION: DPM Timings might need to be adjusted in eCIFX_TOOLKIT_EVENT_PRE_BOOTLOADER notification callback, as RDY signal is not activated by ROM loader. If the host has strict timings (e.g. NXPCA-PCI), the DPM won't be readable. Sample code: case eCIFX_TOOLKIT_EVENT_PRE_BOOTLOADER: if(eCHIP_TYPE_NETX51 == ptDevInst->eChipType) { /* netX51 has a timing configuration without rdy/busy, so we need to adjust it here, to be able to access memory starting at offset 0x100 */ NETX51_DPM_CONFIG_AREA_T* ptDpmConfig = (NETX51_DPM_CONFIG_AREA_T*)ptDevInst->pbDPM; ptDpmConfig->ulDpmRdyCfg = MSK_NX56_dpm_rdy_cfg_rdy_pol | /* DPM is ready when external RDY-signal is high. */ (1 << SRT_NX56_dpm_rdy_cfg_rdy_drv_mode); /* Push-Pull Mode */ ptDpmConfig->ulDpmTimingCfg = 0; /* Disable setup times and filter. */ } break; - Updated 2nd Stage Loader to V1.4.16.0 V1.1.4.0 ----------------- - Fixed memory leak when using netX100 RAM based devices (e.g. cifX) - Fixed memory leak if unsupported DPM channel was found - Updated 2nd Stage Loader to V1.4.12.0 V1.1.3.0 ----------------- - Added Lint fixes and re-ordered handling in DSR function - Added excplicit casts to allow compiling using C++ compiler (Tested using Visual Studio) - Suppress checking of sync handshake flags in DEV_IsReady/IsRunning and DEV_GetHandshakeBitState for performance reasons on slow busses - Updated 2nd Stage Loader to V1.4.10.0 V1.1.2.0 ----------------- - Added notification callback for COM flag state V1.1.1.0 ----------------- - Added command packet to set the device time during hardware startup, if a RTC is aveilable - Added MRAM API functions V1.1.0.0 ----------------- - Fix: Lock DEV_DoSystemStart() againt DSR to prevent writes to handshake flags while in reset, if an IRQ occurs - Fix: DEV_DoSystemStart() now clears internal COS Flags in Interrupt mode - Updated unsigned long data types to uint32_t - New header file added to separate declarations for cifX hardware functions from cifXToolkit.h - Added Hardware interface layer (supports serial DPM access e.g. via SPI, RDY/BSY DPM workaround) - Added optional validation of pointers and handles passed to toolkit functions (CIFX_TOOLKIT_PARAMETER_CHECK) - Added Debug Trace output of device information (DevNr/SerialNr/SlotNr) - Added eCIFX_DEVICE_DONT_TOUCH device type to use cards without any changes - Added xSysdeviceBootstart() / DEV_DoSystemBootstart() function to switch into bootloader mode V1.0.4.0 ----------------- - Starting automatically downloaded configuration database may fail for flash based devices V1.0.3.0 ----------------- - Handshake Flags may get out of synch when doing a system start in interrupt mode, if firmware asserts interrupt at unexpected time - Module downloading to flash / starting from flash may timeout when for large modules V1.0.2.0 ----------------- - xChannelDMAState() comments fixed - netJACK 100 added to PCI definitions header file - ChannelDemo() / xChannelIOWrite() uses now abSendData[] instead of abRecvData[] - cifXCreateChannels(), fixed memory leak if channel was not created - xSysdeviceReset() / xChannelReset(CIFX_SYSTEMSTART) may leave COS flags in invalid state in interrupt mode (influences loadable modules) V1.0.1.0 ----------------- - DSR Handler crashes due to invalid access on a communication channel instance - xSysdeviceReset is now locked against ISR/DSR or Cyclic Thread. Earlier versions may write invalid handshake flags during a system start if the cyclic thread or IRQ accesses the flags during this time. - Downloading loadable modules (.NXO) may fail on larger files due to the last confirmation packet taking longer than expected V1.0.0.0 ----------------- - xChannelSyncState parameters updated (added Timeout) - SyncState Error codes added - Loadable modules may not work (depends on implementation of OS_Strncpy) - Fixed GCC compiler warning (deferencing pointer breaks strict-aliasing rules) - If start of Firmware fails (e.g. wrong HW options) the card will not be rejected by toolkit. It will be used as a card with a system device only. - xChannelPLCMemoryPointer may not working correctly due to an invalid parameter passed to OS_MapUserPointer / UnmapUserPointer - GetMDRequest may fail depending on the implementation of OS_Strncpy - xChannelPLCActivateRead / Write did not lock access to handshake flags - cifXHandleWarmstart() using same buffer for send/receive in TransferPacket() fixed - DEV_DeleteFile(), OS_Strncpy() size of copied data must include the necessary 0 character - DEV_Download() uses twice the packet timeout (=10s) for the last packet if modules are loaded V0.10.1.0 -------------------------- - Interrupt mode may miss first interrupt after initialization, due to readout of sync handshake flags V0.10.0.0 -------------------------- - Functions for SyncMode added - Interrupt Handling changed to support notification callbacks for user (xChannelRegisterNotification) V0.9.9.0 -------------------------- - 64-Bit Support added (ISO-C99 header file "stdint.h" is now needed to provide fixed-width data types) B0.953 -------------------------- 09.02.2010 - ISA card handling improved by adding an aditional DEV_ReadHandshakeFlags() in cifXCreateChannels() B0.952 -------------------------- 25.01.2010 - cifXEndianess.h. added additional braces into the conversion macros B0.951 -------------------------- 03.12.2009 - DEV_GetMBXState(), receive count handling fixed B0.950 -------------------------- 06.11.2009 - DMA support added - Slot number handling added B0.946 -------------------------- 01.10.2009 - DEV_ReadHostState extended by fReadHostCOS to prevent the read back of the host COS flags when they are not changed by the hardware - Handling of COS flags improved (BUS_STATE / CONFIG_LOCK / INITIALIZE) and handled now in DEV_DoHostCOSChange() - DEV_DoChannelInit() now checks if the READY flag is gone and than waits until it is back B0.945 -------------------------- 31.08.2009 - cifXStartModule() fixed if no channel is available during first start - HilPCIDefs.h included - cifXHWFunctions(), TRUE/FALSE definition replaced with 1/0 - cifXDownload(), CIFX_BUFFER_TOO_SHORT fixed by using now the max. packet size for confirmation packets B0.944 -------------------------- 07.07.2009 - Interrupt handling in ISR and DPC fixed/improved - xChannelBusState(), COM_FLAG handling in conjunction with timeout settings fixed/improved - xChannelBusState() handling moved to DEV_HostState() function to be callable as a low level function timeout settings fixed/improved B0.943 -------------------------- 28.04.2009 - Module download improved for comX B0.942 -------------------------- 13.02.2009 - DEV_CheckCOSFlags is now locked against DEV_DoChannelInit, to prevent COS Flag evaluation while a channel init is running B0.941 -------------------------- 30.01.2009 - Big Endian Host support added via CIFX_TOOLKIT_BIGENDIAN define - New parameter (eDeviceType) added to device instance to allow DPM cards (e.g. NXHX500/50) to only use RAM (like cifX does). Previous versions always expected a serial flash on DPM based devices - New parameter (eChipType) added to device instance, so functions like USER_GetBootloader can check if a bootloader for a netX50 or netX100/500 is requested. - netX50 support added 20.01.2009 - "Loadable Modules" support for comX included B0.940 -------------------------- 12.12.2008 - PRLIMINARY support for "Loadable Modules" included V0.931 (under Development) -------------------------- 10.12.2008 - cifXCreateChannels() answer to warmstart commands now excepted with size != 0 preventing error 0x800A0012 27.11.2008 - IO mode RCX_IO_MODE_BUFF_DEV_CTRL included 24.11.2008 - cifXTKitISRHandler() extended by new parameter fPCIIgnoreGlobalIntFlag - Filename cases corrected to support case sensitive operating systems 17.06.2008 - While loops extended by Sleep(0) B0.930 (under Development) -------------------------- 16.05.2008 - xChannelOpen() error return extended CIFX_INVALID_CHANNEL - OS_MapUserPointer() and OS_UnmapUserPointer() now have a new parameter pvOSDependent 07.05.2008 - Signalling interrupts from DSR changed, so that systems that may get interrupted during DSR are working - DSRhandler changed to signal netX Handshake bit changes (since previous irq) instead of Host/Netx flag differences. This allows DEV_WaitForBitstate_Irq 06.05.2008 - xDriverErrorDescripton did not return error description, due to internal array size miscalculation29.04.2008 - DOWNLOAD_MODE_LICENSECODE added 28.04.2008 - PLC Functions did not return NO_COMFLAG error B0.923 (under Development) -------------------------- 02.04.2008 - Wait functions in cifXHWFunctions reviewed - xChannelReset(CIFX_CHANNEL_INIT) will only check if the channel becomes READY. Checking for RUNNING removed. - cifXStopDevice(), deletion of the system device interrupt events included 21.02.2008 - Error return in xDriverMemoryPointer() and xChannelPLCMemoryPtr() fixed V0.922 (under Development) -------------------------- 04.09.2007 - Setup program: - Bug fix, which solves the Warmstart.dat files deletion if more than two cards are using it, included (this fix was lost in V0.921) - Firmware name and version now shows "-- not available --" for .mod files PROFINET slave parameters: - Input/output size changed to 1024 Byte - Device type string limited to 25 characters - Test program: - Scroll bar for the receive packet text control included, to allow viewing of packets, which are bigger than the control. - All version information changed to V0.922 V0.921 (under Development) -------------------------- 26.07.2007 - Download now supports downloading to serial flash on target (if available) Filename passed to download function will be used to identify target (e.g. "SYSFLASH") 10.07.2007 - cifX Test crashed, if no device was selected in dialog 03.05.2007 - On DPM based devices a the driver always creates a communication channel. Even without a firmware. This can lead into blue screen if such a channel is access from a user application. 26.04.2007 - Function xChannelBusState() now checks the COMMUNICATION-Flag if a timeout is given. Without a timeout, only BUS ON /OFF is processed 25.04.2007 - Reading security FLASH and placing data into the DPM (bootloader and firmware) - File header handling included - Prevent multiple firmware files (only the first one is usable) included - Test of DPM and PCI hardware 19.04.2007 - MD5 checking for files included (calculated on hardware and firmware) - Download for DPM based hardware reworked and files are only be downloaded if they are not existing or different - Download mode now choosen by the file extension - New 2nd stage bootloader detection and handling included 18.04.2007 - API functions for * xSysdeviceUpload/Download, xSysdeviceFileFindFirst/FindNext * xChannelUpload/Download, xChannelFileFindFirst/FindNext extended by two new parameters, to be able to deliver unhandled receive packets during these functions - Definitions for CIFX_COLDSTART and CIFX_WARMSTART changed to CIFX_SYSTEMSTART and CIFX_CHANNELINIT - New COS-Flag handling included - Function xChannelBusState() included V0.920 (under Development) -------------------------- 11.04.2007 - C++ style comments removed, missing comment end cifXHWFunctions() fixed 10.04.2007 - Prepared interrupt handling (provided in cifXInterrupt.c) - Update DEVICEINSTANCE structure to provide infos needed for IRQ handling - Added OS Dependent functions for Enabling/Disabling device interrupt (needed in OS Abstraction layer) - Added CIFx Device Driver dependent include files into OS_Includes.h - Added the following functions to cifX API * xChannelIOInfo * xSysdeviceReset * xChannelFindFirstFile * xChannelFindNextFile * xChannelUpload * xSysdeviceFindFirstFile * xSysdeviceFindNextFile * xSysdeviceUpload - Added cifXTkitCyclic timer to Toolkit API, used to poll the COS flags on a polled cifX device. Needs to be called by user cyclically (recommended time is approx. 500ms) - Added Device Functions used by new API functions * DEV_Upload function * DEV_DoWarmstart * DEV_DoColdStart - Prepared interrupt handling via 2 functions needing to be called by user it IRQ is needed * cifXTKitISRHandler * cifXTKitDSRHandler - Renamed USER_ErrorTrace to USER_Trace and changed signature to provide more flexibility. Toolkit now uses a global variable g_ulTraceLevel to adjust the amount of trace messages. - Some hardware dependent functions did poll the Handshake flags if interrupt is enabled - DEV_ReadHandshakeFlag did check the COS flags wrong - DEV_TriggerWatchdog illegally returned CIFX_DEV_NOT_RUNNING even if the device was running - DEV_IsCommunicating did not set CIFX_DEV_NO_COMFLAG correctly - USER_GetInterruptsEnable added, to give the user the possibility to enable interrupts on a per device base V0.912 (09.01.2007) ------------------- - Function bodies for xChannelGetSendPacket xChannelConfigLock xChannelReset included - Internal version number set to V0.912 V0.911 (26.10.2006) ------------------- - UNREFERENCED_PARAMETER macro fixed V0.910 (19.10.2006) ------------------- - Compiler Warning fixes for GNU compiler - VxWorks combatible HANDLE now used (HANDLE-->CIFXHANDLE, API change) - CifxErrors.h now uses C-Style comments - Structure Packing fixed for MidSys_Public.h - Some toolkit functions now static, as they are only used internally V0.903 (13.10.2006) ------------------- - DEV_WaitForBitState_Poll's timeout changed. - Starttime was read inside poll loop - Starttime read into unsigned long, for overflow detection a long variable is needed - DEV_ReadHandshakeFlags() wrong HCF_NETX_COS_ACK flag fixed - Fixed bit state waiting timeout for timer overflows - Warmstart handling included - OS_MapUserPointer/OS_UnmapUserPointer added for DPM mapping to application V0.902 (06.10.2006) ------------------- - Put/GetPacket now checks for Ready flag - Fixed size calculation for OS_MemRealloc calls - Host Handshake Flags did not update COS flags - Host Handshake Flags are now read earlier, to allow Ready check on Firmware read packets - Calculation of the mailbox size for system channel and communication channel fixed (sizeof......) V0.900 BETA (10.08.2006) ------------------------ - first version