da8
1. Download SPLat Firmware
DA8 Analogue Input/Output board
==================
== Version 5.5 ==
==================
4 October 2024
- Added code to enable the build date and time to be retrieved.
==================
== Version 5.4 ==
==================
8 August 2023
- Simplified VIT test in Production Test
==================
== Version 5.3 ==
==================
25 May 2023
- Modified Production Test to skip 3V3 trim if already calibrated
- Made PA9 an IO_UNUSED pin since it's not using VBUS.
- Changed board type so it would show up as SPLat rather than HMI430
- Added test for EEPROM (NVEM1)
==================
== Version 5.2 ==
==================
21 June 2022
- Removed additional four analogue outputs from the SEXi map so existing customer code can continue to run
==================
== Version 5.1 ==
==================
2 September 2021
- Rebuilt with new extended Modbus code.
- Added 64KB NVEM2 instance
==================
== Version 5.0 ==
==================
14 July 2021
- Added capability of using DIOs for 256-step analogue output values.
- This involved adding four new "dummy" analogue outputs
- SYSTEM: Initialised I2C EEPROM clock line as push-pull instead of open-drain.
- SYSTEM: Disabled VBUS detection on USB port.
==================
== Version 4.10 ==
==================
1 April 2020
da8_1504_release_v4-10
- For production test, increased tolerance on analogue outputs from 1% to 2% to better reflect component tolerances.
- SPLatOS: For all F4 builds, added 4KB battery-backed NVEM3
- SPLatOS: Updated LCD driver
- ST: the stepper was moving erratically, caused due AIO_vSetTimerPWM recently resetting the CNT. Unsure why this was done, so now the count is NOT reset.
- 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: 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.
- VM: 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).
- VM: Added macro paste commands to the utilities.
- VM: 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.)
- System Clarification: Changed OBCA Read command names to indicate Poll4 instead of the incorrect Poll1.
- VM: Added framework code behind the SPiceX calls: SPiceConfigU, SPxTxfrU and SPxMode.
- 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.
- (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.
- SPLat/OS: Modified LCD driver code to minimise the chance of multiple threads writing to the LCD at the same time.
- VM: Changed order of LCD initialisation to ensure the buffer is cleared after the CGRAM is set.
- VM: 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)
- VM: 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.
=================
== Version 4.9 ==
=================
da8_1504_release_v4-9
03Aug2018
- VM: comms profile 5 was 8bits, odd_parity, 2stop but should have been no_parity as per MODBUS standards
- The STM32F4 I2C EEPROM driver had an edge case where sometimes it wouldn't send a NAK when reading from NVEM1, this meant the EEPROM sometimes held the SDA line low and caused the F4 to flag a BUSY condition & reset the VM.
- SPLatOS: AIO_oReadVref now returns a normalised value, unscaled as some boards may use 3.4V rather than 3.3.
- VM: floatFromU was not working correctly for negative numbers.
- VM: OBLCD_Dim may now be used without throwing an error on boards that only support a virtual LCD, it is simply ignored.
- STM32F4: can now read the 3V3 rail
- VM: ARM controllers now support UVtoNV for NVEM page 1 and up.
- 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.
- 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: stop I/O messages during app upload
- VM: the delay between a slave receiving and replying was to quick causing legacy controllers to miss the response, increased to around 500us.
- VM: Fixed InputOM that was returning wildly incorrect values.
- Xwire: the Xwire slave thread could run out of stack and cause a reset
- ARM: fixed a reset that could occur if Xwire Slave was restarted when it & MODBUS Slave were operating simultaneously.
- ARM: WarmBoot now doesn't cause an error, it just restarts the VM. This is the same behaviour as the 8bit controllers.
- ARM: SEXI was incorrectly calculating the output size limit, so a value of 37 outputs which is legal was throwing a "too big" error.
- VM: floatFromU and fixToU were corrected to treat W as big endian when transferring between U
- DA8: default SEXI app now supports address change on the fly and auto detect of TTL/485 ports. A 5th virtual digital input was added, called iSlaveOK (TRUE while slave is replying via SEXI), it's use is optional so existing apps won't break if they don't have it in their xwire table.
- 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: 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).
- SPLatVM: MemToUV and UVToMem were ignoring the u[n] offset and always starting from u[0].
=================
== Version 4.8 ==
=================
da8_1504_release_v4-8
12 Sep 2016
- 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.
=================
== Version 4.7 ==
=================
01 Aug 2016
- production test for DA8 updated to use HMI430
- DA8: new SEXI app with twice the performance. Requires firmware 4.7.
- VM: Doing a fGetTimer or Test quickly after starting a timer may sometimes have caused the timer to expire immediately.
- VM: WtoU, QtoU, UtoW, UtoQ, fixToU, floatFromU, would incorrectly error when loading a float into U[16+]
- VM: WaitOnKT wasn't working (incorrect opcode length)
- VM: GoIfInOn/Off/K were ignoring "J"
- VM: Fixed STTest which was not working correctly due to a typo. It was especially worse with small delays.
- VM: NVReadRec & NVWriteRec were incorrectly expecting a 16 bit address but it's only an 8 bit address.
- OS: STM32F4 devices now increase the nof analogue samples/clock to increase accuracy
- VM: A change to detect duplicated slave entries in the Xwire table was preventing correct parsing of the table, meaning slaves often weren't being added to the I/O map.
- 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.
- 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
- 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
- VM: low speed digital (OBCB) counting now works on ARM controllers.
- 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.
- OS: fixed bug in DIO_vSetActiveLevel() that was clobbering debounced inputs
- VM: Now ensure countdown timers are cleared on VM reset
=================
== Version 4.6 ==
=================
21 Aug 2015
- DA8: code read protection is now enabled, JTAG cannot be used to read out the SPLat application.
- DC216, DT16, DA8 now all support USB
- VM: loss of SPLat/PC will now stop I/O update messages from being sent.
- VM: SEXI was not receiving any _additional_ buffer from the slave device.
- VM: Analogue output PWM frequencies can now only be set for outputs exposed to the VM
- VM: draft of support for OBCB instructions
- STM32F4 boards: fixed a crash that would sometimes occur when connecting SPLat/PC. Due to CCM-RAM not being initialised and nVM_vDeregistered() trying to kill a bogus thread pointer.
- VM: fixes to Xwire slave LCD, esp when LCD isn't 20x4.
- VM: An ARM based controller running as an Xwire slave can now display LCD text broadcast from a Master Xwire controller.
- VM: A SPLatLink "Get" was returning 1 byte less than it should.
- SPLatVM: Fixed "Not" which was converting 0 to 1 but should have been and is now converting it to 255. This bring ARM boards in line with HC08 boards.
=================
== Version 4.5 ==
=================
02 Jun 2015
- ARM: fGoIfPos was getting confused by a -0.0, changed it and fGoIfNeg to use the signbit macro.
=================
== Version 4.4 ==
=================
21 Apr 2015
- DA8: Now correctly light the status LED green when the SEXI connection is ok.
- ARM: Fixed error in SEXI that was preventing analogue output value to be sent to the slave.
- VM: Xwire error counters were only incrementing in debug builds; Xwire was not incrementing the error counter if the received packet's length was wrong.
- VM SEXI:a bug occurred when slaves did not have inputs in multiples of 8 and this would cause inputs from one slave to overwrite inputs from another.
- VM: A recent fix for Xwire caused a regression in Xwire Master that caused it to access a NULL func ptr for XwirePhys when starting Xwire.
=================
== Version 4.3 ==
=================
01 Apr 2015
- First formal release.
2. Download STMicro DFU Demo
Download then install the STMicro DFU “demo” making sure you unstall any old version first. This tool will upload the firmware to your SPLat controller. You will need a USB Type-A to Mini-B cable.
- Install the DFU Demo before connecting your controller to the PC. Run the DFU Demo and you’ll see this:

- Install the PGM link on your controller, then apply power and connect it to your PC. (If you’re using the EC1, holding the button down when connecting USB will enter download mode) The DFU Demo will now show an available device:

- Tick the boxes as shown, the click Choose and select the controller firmware file you downloaded above.
- Now click Upgrade:

- If you see this popup below, click Yes then wait about 30 seconds. Sadly there’s a bug in the downloader and it will crash if you don’t wait for a bit. If you hear the USB boing bong sound, you’re good to proceed to the next step.

- Just say Yes. (But if you saw the read protected popup, be sure to wait about 30 seconds before clicking Yes.)

- Now the new firmware will be uploaded and at the end you’ll see this

- All done. Remove the jumper and USB cable, then power cycle your controller. You’ll need to reinstall your SPLat application.
Please be sure to tick the “Verify after download” and “Optimize Upgrade duration” checkboxes before upgrading the firmware
If you’re not sure what you want, give us a call: +61 3 9773 5082