sx10508

1. Download SPLat Firmware

**
** Before doing a firmware update, be sure to connect to the first COM port and
** bring up the menu in a serial terminal program.  Make a note of the RTC
** calibration value displayed in the title block as you will need to re-enter
** this after a firmware update.
** 

==========
== V4.8 ==
==========
27 March 2023
- Debugged Production Test

======================
== V4.7 (sw V2.1.5) ==
======================
17 March 2023
- Added optional parameter to serial-mode newfile command to allow a file to be named explicitly.
- Changed board type so it would show up as SPLat rather than HMI430
- Fixed F3 SD SPI Driver issues
- Three years plus of system changes:
   - System: Added SPxTxfrU instruction to generate a CRC16.
   - Changed SPxTxfrU instruction to a SPxChOut instruction: Load U with the data, V with the length, then issue a CPU SPxChOut command with code 0 for 16 bits and 1 for 24 bits.  Results start at U[1]
   - Also removed a warning from the VM LCD code.
   - (System) Added magnitude checking when sending the LSB of an analog value over SEXI
   - SX10508: Work in progress on debugging the file system problems commencing with the STM32F3 changes in 2016
   - Modified reset cause determination to put watchdog before pin reset because - at least on the F3 - both seem to be set by the IWDG signal.
   - Reset cause only seems to be used by one product so far.
   - Modified order of reset condition testing so watchdog would have first priority.
   - Added code to handle a Modbus ReadInputRegisters command, faking it to read the RAM.
   - Added Modbus code also to read and write addresses in the 4000 range and the 5000 range, faking them as RAM locations.
   - Modified System source files so their ARM_vCrash calls can be trapped.
   - Updated SPX code for CPU.
   - Modified LCD code so that if the LCD is OFF and OBLCD_Dim has ever been called, the buttons will be marked as inactive.
   - Changed checking of pin reset reason in resetInit function before checking standby.
   - boolean VM_oSPLatLinkConnectivity(void) function is added to splat_vm.c
   - Turned off VBUS sensing code as it doesn't seem to affect normal operations and allows the VBUS pin to be used for other things.
   - Modified STM32 F4 register allocation to allow PWM signals to be generated on the N outputs on port E.  This might or might not work.
   - Modified PWM driver code to cope with inverse outputs correctly.
   - Modified STM32 PWM code to only include inverted inputs for 405/407.
   - Added utility function to check and convert numbers incorrectly converted by FloatMem16S.
   - Updated source code for FloatMem16S to convert numbers correctly.
   - CRC16 init value define added.
   - Added maths functions to the HMI700.
   - Added hooks in all currently-used device types to run CRC calculations on all transmitted bytes.
   - Working on making the SPx calls for the CPU more available.
   - Completed mapping all SPx commands implemented in 32-bit CPU to SPLat functions.
   - Added commands to implement indexed CRCs, whereby a user can run up to 5 CRC implementations at a time.
   - Increased allowable Modbus message length from 125 to 253 to allow more registers to be sent at once with the available buffer size.
   - Added beep when a button is pressed, but only if none are pressed before.

==========
== V4.6 ==
==========
28 May 2020 (on branch SX10508_v4.6)
- Back-tracked to version 4.4 because it worked.
- Added XwirePhys command during initialisation of SPLat code to ensure it's set to something
- Added XWireStop command when selecting User mode to ensure the Xwire code stops running

==========
== V4.5 ==
==========
25 May 2020
- Added XwirePhys command during initialisation of SPLat code to ensure it's set to something
- Added XWireStop command when selecting User mode to ensure the Xwire code stops running
- Included 4 years of system code updates:
  - OS: STMF4 DAC configuration now allows the buffer to be enabled or disabled
  - VM: Fixed display of PermStore values in the "Module" window in SPLat/PC as all bytes were off by 1, thus the first byte was always missing and the "status" was never correct.
  - VM: the Xwire LCD master now sends zeroes for the command bytes (blink, etc) otherwise sending these bytes sent garbage and stuffed up the LCD.
  - OS: created common VTrim module
  - OS: Updated older projects to use the BILED module
  - OS: Saw the 1 second timer getting delayed, manifested by ComTestStartTimer taking 13 seconds dignal rather than 10.  Due to timers being deleted before the next timer was fetched.
  - VM: ComTestStartTimer now using fast tick to avoid expiring after 9 - 10 seconds (only following RUN from SPLat/PC, power on was always 10s).
  - VM: XwireGetPollCntr now increments as soon as a packet is received rather than at the start of sending the response, this also fixed a problem where poll count was not incrementing if the slave had no data to return; interpacket time delays have been shortend to increase throughput.
  - Increased timer stack from 64 to 80
  - STM32: The watchdog can now have it's timeout set by the application
  - VM: Fixed STTest which was not working correctly due to a typo.  It was especially worse with small delays.
  - STM32F0: DIO_vWrite() was HardFaulting when clearing a pin, moved it to the BRR specific register
  - OS: added UTIL_bBitReverse()
  - VM: NVReadRec & NVWriteRec were incorrectly expecting a 16 bit address but it's only an 8 bit address.
  - STM32F3: EEPROM driver is working
  - STM32: I2C EEPROM device can now be specified at runtime
  - STM32: Lowered priority given to reporting watchdog resets as it was being reported rather than power on from standby (when the wake from standby was being intentionally triggered by the dog).
  - VM: simplified Shadow function (write now does a clear too)
  - VM: SEXI was not working when analogue I/O didn't start at 0
  - VM: now able to report analogue I/O when numbering doesn't start at 0
  - SPLatVM: SEXI was not turning off blinking outputs when SPLat/PC connected
  - SEXI: a duplicate slave entry in the Xwire table now doesn't incorrectly increase the nof I/O's;
  - VM: More than 10 analogues, in or out, are now correctly sent to SPLat/PC.
  - VM: Now ensure countdown timers are cleared on VM reset
  - VM: GoIfInOn/Off/K were ignoring "J"
  - VM: ComTestStartTimer now using fast tick to avoid expiring after 9 - 10 seconds (only following RUN from SPLat/PC, power on was always 10s).
  - VM: XwireGetPollCntr now increments as soon as a packet is received rather than at the start of sending the response, this also fixed a problem where poll count was not incrementing if the slave had no data to return; interpacket time delays have been shortend to increase throughput.
  - VM: Fixed display of PermStore values in the "Module" window in SPLat/PC as all bytes were off by 1, thus the first byte was always missing and the "status" was never correct.
  - VM: the Xwire LCD master now sends zeroes for the command bytes (blink, etc) otherwise sending these bytes sent garbage and stuffed up the LCD.
  - OS: Created IO_UNUSED() macro
  - VM: Created a generic conductivity module.
  - VM: WaitOnKT wasn't working (incorrect opcode length)
  - OS: OBLCD now returns a SeqCount whenever the buffer has changed so the caller can refresh only when necessary.
  - VM: WtoU, QtoU, UtoW, UtoQ, fixToU, floatFromU, would incorrectly error when loading a float into U[16+]
  - VM: Doing a fGetTimer or Test quickly after starting a timer may sometimes have caused the timer to expire immediately.
  - STM32F3: now support the DACs
  - VM: fixed a serious bug in fSTTimeSince & STTest that 2 days after the controller is turned on made both functions think the elapsed time is always greater than 167772.16s.
  - ARM: The SPLat/VM on ARM boards was throwing a RAM OutOfBounds error when trying to access byte 250 which is actually the legal last address.
  - created VM keypad driver
  - SPLatVM: MemToUV and UVToMem were ignoring the u[n] offset and always starting from u[0].
  - ARM: volatile in typedef was placing constants in the .data segment, moved volatile keyword to variables themselves.
  - ARM: created common function for fetching device ID; STM32F4 devices will now report a different USB serial number, hence their COM port assigned by windows will change.
  - ARM: a 16bit and 24bit ID is now available on all ARM boards.  These are a CRC of a bigger ID so there's a small chance two controllers may have the same ID (chance is obviously less with the 24bit version).
  - VM: sometimes a controller running MODBUS would reset when SPLat/PC connected due to an incorrect method of mutex release when closing the MODBUS port.
  - ARM: removed "oIsSDA" flag for I2C definition as it's now done automatically
  - VM: a pullup can now be specified for the serial RX pin.
  - Added RXPULLUP to F3 and NXP builds
  - ARM STMicro boards: If MODBUS was set to 8 data bits even parity, a 0x00 would cause a LIN break and resulted in the packet being dumped resulting MODBUS errors (typically no response if the SPLat is a MODBUS slave).
  - VM: SPx callbacks modified to receive the registered address, this allow multiple instances to exist.
  - OS: created htonl()
  - VM: floatFromU and fixToU were corrected to treat W as big endian when transferring between U
  - removed double handling of the xwire physical interface number, so now it's not in VMXW module but is only in the XW module.
  - ARM: SEXI was incorrectly calculating the output size limit, so a value of 37 outputs which is legal was throwing a "too big" error.
  - ARM: WarmBoot now doesn't cause an error, it just restarts the VM.  This is the same behaviour as the 8bit controllers.
  - ARM: fixed a reset that could occur if Xwire Slave was restarted when it & MODBUS Slave were operating simultaneously.
  - Xwire: the Xwire slave thread could run out of stack and cause a reset
  - NVEM may now report SPxNoResp instead of NVEMPtrOOB if there's a problem communicating with an external EEPROM
  - VM:The CAN bus interface is now supported
  - VM: SPxChOut is no longer NULL terminated, allowing V to be any value without impacting the data in U.
  - FatFS: added SD card "how it works" docs
  - logger1302: updated for latest OS
  - various SPx modules updated for latest OS
  - now filling both stacks to help detect overflow
  - OS: created a generic ST SPI configuration, clock & txfr function.
  - OS: increased IRQ stack to avoid overflow in debug builds
  - VM: Fixed InputOM that was returning wildly incorrect values.
  - VM: the delay between a slave receiving and replying was to quick causing legacy controllers to miss the response, increased to around 500us.
  - VM: Oh dear, RTCDateToUV, RTCDMToUV, RTCHHMMToUV, RTCHHMMSSToUV were all incorrectly using the _current_time_ rather than the values in the RTC registers.  So functions like OBLCD_HHMMSS were displaying the current time rather than the time in the RTC registers.
  - VM: stop I/O messages during app upload
  - Setting the NV pointer no longer checks for OOB, it now only check to ensure the pointer is < 0xFFFF.  This means the PTR can be set and page chosen in any order.  The check for NVOOB is done only when reading/writing NVEM.
  - VM: YieldTask may now be called in single tasking mode without throwing en error.  This is especially useful in subroutines which may be shared by both single and multi-tasking applications.
  - VM: ARM based OBQC_fGet used to return 0 thru 16777215, but this meant moving backward from 0 would cause a jump to 16777215.  So now it returns negative, which is the same as 8bit SPLat controllers.
  - VM: ARM controllers now support UVtoNV for NVEM page 1 and up.
  - VM: A race condition existed in the QuadratureCounter that could cause wrong readings to be returned, often this was seen when moving backwards with the count being returned as a large positive number rather than a small negative number.  Thanks to Michael B for spotting this.
  - VM: OBLCD_Dim may now be used without throwing an error on boards that only support a virtual LCD, it is simply ignored.
  - STM32F3: can now measure the 3V3 rail based on an internal reference
  - VM: floatFromU was not working correctly for negative numbers.
  - ARM ST: added generic speaker driver for ST parts, this required a large structural change to the analogue output module (both PWM & DAC)
  - VM: reading the internal analogue reference via a float (ie in the VM) now returns a normalised number based on the ST factory calibration value (multiply by 3.3 to get Vcc)
  - VM: relay driver can now invert the PWM signal, for those times it's connected to an inverting input.
  - SPLatOS: AIO_oReadVref now returns a normalised value, unscaled as some boards may use 3.4V rather than 3.3.
  - SPLat/PC is now able to connect via TTL serial to ARM boards on the first attempt.
  - VM: comms profile 5 was 8bits, odd_parity, 2stop but should have been no_parity as per MODBUS standards
  - OS: ANALOGUE_OUTPUT now includes an INVERTPWM parameter, so fAnOut 0.0 means maximum.
  - VM: added support for OBLCD_HGraph, OBLCD_CursorOff, OBLCD_CursorOn, OBLCD_CursorBlink.  These also work over Xwire, both as master and as slave.
  - VM: suspend and resume were using little endian rather than big endian, never caused a problem, only a train spotter would notice.
  - VM: UVtoNV wasn't working right as it was ignoring the "offset", so now modified for use in ARM meaning V must be explicitly set, it won't use NVRecLen to allow for a more flexible instruction.
  - VM: added generic module for driving outputs as either analogue or digital
  - VM: If the first output in a call to OutputM didn't exist the controller would correctly reset but incorrectly not report the error to SPLat/PC.
  - STM32: created PWM measurement driver
  - Added SPxPoll1 function to LCD VM so it could:
    - Read a character from the LCD buffer at a nominated position;
    - Read the current brightness (also available via the CPU).
  - Also added macro paste commands to the utilities.
  - Added SPxCmd2 command to write a byte to a specified LCD buffer location. Command format is SPxCmd2 2,address with U[0]=offset and U[1]=byte.
  - Utils: Added 32-bit version of bit reversal code just to complete the set. (There was a gap between 16 and 64 bits.)
  - Implemented SPx command (Cmd4, specifically) to set any random baud rate on any port - The command number is the physical port number and U[0..3] is the baud rate as a float.
  - SetCursor or SetCursorYX now outputs the new position to the display immediately if the cursor is on.
  - (System/VM): Added new function to enable setting just the receive call-back function.
  - System: Added new allowable baud rate value of 15626 (offset 13), specifically for the RFID device.
  - (System) Increased U part of UV register array from 21 bytes to 251.
  - Added code to implement OBLCD_GetCurYX
  - SetCursor or SetCursorYX now outputs the new position to the display immediately if the cursor is on.
  - Added framework code behind the SPiceX calls: SPiceConfigU, SPxTxfrU and SPxMode.
  - SPLat/OS: Modified LCD driver code to minimise the chance of multiple threads writing to the LCD at the same time.
  - SPLat/OS LCD Driver Update:
    - Changed order of LCD initialisation to ensure the buffer is cleared after the CGRAM is set.
    - Moved 50us delay into LCD_vWriteByte to ensure every command includes an appropriate delay.
  - (System) Implemented signed version of byte-sized display routines (OBLCD_SDecDispMFW, OBLCD_SDecDispMVW, OBLCD_SDecDispXFW and OBLCD_SDecDispXVW)
  - System Firmware for 32-Bit: Changed 256-instruction limit to be 1024 instructions, as the 32-bit code is about 10 times faster than the 8-bit code where this limitation was introduced.
  - System: SPxCPU: Changed SPxTxfrU instruction to a SPxChOut instruction. Load U with the data, V with the length, then issue a CPU SPxChOut command with code 0 for 16 bits and 1 for 24 bits.  Results start at U[1]
  - (System) Added magnitude checking when sending the LSB of an analog value over SEXI
  
==========
== V4.4 ==
==========
12 Feb 2016
- SX10508: The RS485 port may be used for logging ASCII/Binary data rather than just Xwire.  The default app will use the RS485 port for this data if link J1 is removed.
- SX10508: added the ability to write the RTC cal anytime.
- SX10508: Enabled code protection.
2. Download the SPLat SPLash application

Download then run SPLash. It won’t install anything but will simply run from the current directory. This tool will upload the firmware to your SPLat controller. You will need a USB-TTLSerial cable.

  1. Run SPLash and you’ll see this:
    SPLash screen shot
  2. Either Browser or drag&n drop a .hex or .s19 file onto the SPLash window.
  3. Install the PGM link on your controller, connect the TTL communications cable, then apply power and connect it to your PC.
  4. Click the Burn button. You should see the following progress:
    SPLash unprotectingSPLash uploadingSPLash completed
  5. All done. Remove the jumper and power cycle your controller. You’ll need to reinstall your SPLat application.

If you’re not sure what you want, give us a call: +61 3 9773 5082

Do you want to know more?

icon
Head to our
Knowledge Base.

For more information on product detail, software, references and lots more.

learn More
icon
Ready to buy?
Go to the Order Form.

If you already know what you’re after head straight to our full product order form.

Order Now
icon
Need support?
Get in touch.

If you’re unsure what you want or need, or have any questions contact us, we’re here to help.

Let’s chat

If you’re not sure what you want, give us a call: +61 3 9773 5082