hmi430
1. Download SPLat Firmware
Download this firmware file for your controller.
HMI430 - SPLat's smaller touch-screen LCD product
==================
== Version 5.07 ==
==================
23 March 2023
- Changed thermistor parameter from 3970 to 3950 to improve the accuracy.
- Rebuilt 4088-based version only with speaker update included so it will work on older boards.
==================
== Version 5.06 ==
==================
14 April 2022
- Modified Modbus NVEM read/write code to save and restore the NVPtr, NVRecNum and NVRecLen values around NV read/write cycles
==================
== Version 5.05 ==
==================
29 March 2022
- Enabled and debugged speaker frequency setting code.
- Increased available tasks from 64 to 128.
- Extended Modbus access to allow reading of NVEM0, and read/write access of NVEM1, NVEM2 and NVEM3.
- Removed test for Click Code in Simple HMI Button Event 2 handler so Russian strings would work correctly.
- Doubled the SimpleHMI buffer to enable more characters to be displayed in buttons.
- Made Trim Save command actually return TRUE if OK and FALSE if not.
- Corrected Modbus Read Input Registers handling by adding a Format byte.
- Added error caller address to the status structure and message.
- Added SPx CPU call to retrieve the error caller address via SPxPoll2 8,0x11
==================
== Version 5.04 ==
==================
2 July 2021
- Modified production version to NOT clear the Production Test flags after a startup LCD press.
==================
== Version 5.03 ==
==================
9 June 2021
- Improved robustness of RAM test to minimise chances of residual charge fooling the tests.
- Modified alarm output from RAM test failure to drive the speaker correctly rather than just driving the output.
==================
== Version 5.02 ==
==================
29 March 2021
- Changed code behind FloatMem16S to ensure negative numbers get converted correctly.
==================
== Version 5.01 ==
==================
12 March 2021
- Renamed 1788 version of HMI430 to HMI430B to minimise risk of incorrect drag-drop operations.
- First 1788-based Release code.
==================
== Version 5.00 ==
==================
11 March 2021
- First version of code reverted from NXP4088 processor to older, dumber NXP1788 processor.
- Changed all floating-point code from using the onboard FPU co-processor (4088 only) to using software libraries.
- Removed use of in-built comparators (4088 only), leaving the boards vulnerable to a start-up issue.
- Should work on NXP4088 processor as well.
==================
== Version 4.22 ==
==================
??? 2019
- Added SPx call to change the speaker frequency.
==================
== Version 4.21 ==
==================
16 Aug 2018
- HMI430: enabled the TFT power FET which had unknowingly been left off since 1310, colours are now more vibrant
==================
== Version 4.20 ==
==================
07 Jun 2018
- VM: comms profile 5 was 8bits, odd_parity, 2stop but should have been no_parity as per MODBUS standards
- HMI: a rare event of an interrupt occuring during fetch of the device ID would cause a controller reset, the tell tale sign being ROM being filled with 0xAAAAAAAA; flash prefetch timing has been sped up a little.
- Created HMI LCD cal app for end user use.
- 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.
- 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: ARM controllers now support UVtoNV for NVEM page 1 and up.
- 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: 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.
- HMI: support for even and odd parity in user coms has been added
- VM: stop I/O messages during app upload
- HMI: continually calling "On" for the beeper made it sound funny (for controllers with a speaker).
- HMI: added NVEM3 which is 20 bytes of RTC RAM. There's no limit to the number of writes, but requires a battery otherwise the contents is lost at power off.
- 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: 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.
- HMI: if a button is created but has no EV callback, it's deletion was incomplete (some flags like "disabled" were not erased), so the next button to be created would incorrectly inherit these flags.
- HMI: hidden buttons now won't cause a screen redraw when they're created or any parameters are changed.
==================
== Version 4.19 ==
==================
28 Jun 2017
- HMI, fixed: some boards built in 2017 show the "warmboot" error message at power on, seems to be a CPU batch problem.
- 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.
- HMI: DrawImage was incorrectly offsetting the top left coordinate whenever the centre coordinates (ox & oy) were specified.
- ARM: WarmBoot now doesn't cause an error, it just restarts the VM. This is the same behaviour as the 8bit controllers.
- HMI: sequential LF or CR were being ignored instead of created a new line for each instance (only since UTF8 support).
- HMI: now supports up to 95 characters in buttons (was 31).
- HMI: if the second or subsequent line of text is wider than the button, it wasn't being displayed.
- arabic glyph conversion working
- SimpleHMI now supports UTF8
- Frequently at the end of a drag'n drop firmware update the controller would freeze and fail to reboot.
==================
== Version 4.18 ==
==================
28 Mar 2017
- HMI: fixed OBCA which broke when support for the speaker was added in HMI430 V4.16 & HMI700 V4.9. Was only a problem on HMI430_1608+ & HMI700_1610+ controllers.
- HMI: SetBacklight was unable to handle times that are floats, so a time like "15.0" was causing parsing problems.
- 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: SPx callbacks modified to receive the registered address, this allow multiple instances to exist.
- VM: floatFromU and fixToU were corrected to treat W as big endian when transferring between U
- VM: Custom analogue outputs are now "reset" via the fvAOutReset callback rather than outputting 0 to all outputs. This allows a custom handler to do something funky if it needs to.
- 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).
==================
== Version 4.17 ==
==================
08 Dec 2016
- HMI: A recent mod to handle problems reading from external EEPROM at power on broke the ability to update the filesystem when new a firmware update is done.
- 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.
- HMI: HMI430/700 now supports up to simultaneous 80 buttons (was 50).
- HMI: fixed RTC cal in production test which broke because the new speaker uses the same timer.
==================
== Version 4.16 ==
==================
15 Nov 2016
- ARM: volatile in typedef was placing constants in the .data segment, moved volatile keyword to variables themselves.
- HMI: the HMI will now try to load the file system 3 times if it is corrupt. After this it will not erase it and a font of last resort will be used so at least some text will appear on screen.
- HMI: If an image is now drawn with the background colour set to NOTHING ('00010101), then no background colour or background image will be drawn. This allows an image to be overlaid a solid setbounds colour.
- SPLatVM: MemToUV and UVToMem were ignoring the u[n] offset and always starting from u[0].
- HMI: prod test now disables the crosshairs after confirming touch is ok
==================
== Version 4.15 ==
==================
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.
==================
== Version 4.14 ==
==================
01 Sep 2016
- HMI430: production test now only requires one analogue test plug and automates testing the analogue out line.
- 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.
- HMI: the backlight can now be completely turned off without a timeout, eg #HMI SetBacklight( h:0, md:0, od:0 )
==================
== Version 4.13 ==
==================
02 Aug 2016
- HMI: fixed occasional USB lock-up that would cause the whole controller to freeze when a PC is connected
- HMI: OBCA in frequency mode would sometimes return either 0 or double the actual frequency.
- HMI430/700: Added "w" to the ButtonEvent2 mode to allow the button repeat wait time to be set; simple HMI modes "T", "B" and "M" may now take an optional parameter (so they can be turned off).
- HMI430/700: Dragging a b1n file into System Firmware folder will now update the SPLat app without causing an intentional reset.
==================
== Version 4.12 ==
==================
08 Jun 2016
- 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+]
- HMI430: changed mono50, 60, 120 from number chars only to alpha
==================
== Version 4.11 ==
==================
09 May 2016
- VM: WaitOnKT wasn't working (incorrect opcode length)
- HMI: OBLCD text can now be displayed on the HMI, including that received when the HMI is a Xwire slave via:
iiPrintText COMHMI,'1,"g",'3
The current font, colours and bounds will be applied. Each call updates the display once, so it should be done in a loop usually with a Pause.
- HMI: following HMI Reset(), now avoid scanning for button presses until the screen has first been released.
==================
== Version 4.10 ==
==================
27 Apr 2016
- HMI: Added support for OBCA on input 7
- 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.
- 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 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.
- HMI: Added NVEM2, 64kB of volatile RAM storage.
- 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.
=================
== Version 4.9 ==
=================
08 Feb 2016
- HMI: version 4.8 broke firmware and .b1n updates. This is bad. We have tarred and feathered the staffer responsible. If your HMI has V4.8 and you'd like to update, please contact SPLat for help.
=================
== Version 4.8 ==
=================
03 Jan 2016
- ** This release is focused on fixes to the USB filesystem. **
- HMI: screen shot image file now renames with each shot, so it starts with sshot000.png and after dragging it to the PC, becomes sshot001.png ready for the next one.
- HMI: windows would refuse to delete a file that has just been copied to the HMI unless the USB cable was unplugged and reconnected.
- HMI: PNGs with a 8bit colour palette are now supported.
- HMI: screenshot colours are now stronger. As an example, pure white ('FFFFFF) on the HMI is now pure white in the generated PNG rather than a cream colour.
- HMI: fixed file upload where dragged files would not appear in windows explorer because they had a duplicate ID; tweaked used space to include padding.
- HMI430: Add prop20 font as it has proved a great size
=================
== Version 4.7 ==
=================
06 Dec 2015
- HMI: if a screen had a background image and a full width partial height bounds was set, then #HMI Cls() would end up erasing the whole screen.
- VM: low speed digital (OBCB) counting now works on ARM controllers.
- SPLatVM: SEXI was not turning off blinking outputs when SPLat/PC connected
- HMI: fixed centering multiple lines with the \r\n terminator is used.
- HMI: A greeting message is now displayed if pressure on the screen at power-on activates the touch screen calibration routine.
- HMI: Note, % placement now operates as expected in that the font height no longer no longer influences the calculation. This only affects SetCursor and CursroRel instructions.
- 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.
- HMI430: A pressed repeat button now doesn't report repeats when the touch moves outside the button's bounds.
- VM: Now ensure countdown timers are cleared on VM reset
- 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: An ARM based controller runni
- VM: A SPLatLink "Get" was returning 1 byte less than it should.
=================
== Version 4.6 ==
=================
02 Jul 2015
- HMI430: CPU security is now enabled, this means the application cannot be read out via JTAG. Application download via SPLat and firmware update are both still possible. Note the filesystem is not secured, images and font files can be dragged and dropped to the PC anytime.
=================
== Version 4.5 ==
=================
29 Jun 2015
- HMI430: The 3.1V Vdd check will also be called under interrupt, hence we stop all processing and will reset only if Vdd rises above 3.1V for 1 second.
- HMI430: A slow to rise or flaky power supply connection may result in the filesystem being erased. This firmware now monitors the supply rail and waits for it to be stable before performing the power on initialisation sequence. As feedback, the buzzer will sound if the supply is below the minimum level (but high enough for the CPU to start running).
- 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.
- OS: If, for example, EP0 requested a 16byte response, some EP0 functions were sending 8 + 8 + 0 which is wrong as was causing the STM32F4 to send the zero length packet as parts of the response to the next request.
- HMI430: The value parameter in ButtonEvent2 can now handle floating point numbers.
- HMI430: Automatic selection of the pressed button colour wasn't working well for yellow 'FF808080 and it was being drawn as black. So altered the HSV value tweak so the change is now +/- 0.25 rather than +/- 0.5. This now makes the yellow darker rather than black.
- SEXI: can now handle 64 analogue inputs (that's 8 DA8's!)
=================
== Version 4.4 ==
=================
24 Apr 2015
- HMI430: a b1n file, which is a precompiled SPLat application) can now be dragged and dropped into the System Firmware folder to update your customer's application without sending them the source code.
- ARM: fGoIfPos was getting confused by a -0.0, changed it and fGoIfNeg to use the signbit macro.
- 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.
- HMI430: IMPORTANT! character positioning has now standardised both x & w to use the character advance dimension. This means x & w now resolve to the same pixel count, so horizontal buttons like (x:0, w:8) (x:8, w:8) will now nicely touch. This will generally only impact proportional fonts. Percent and pixel positioning are unaffected.
- HMI430: ResumeRightAlign was causing a lockup if a newline was included in the print string
- 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.
- fixed a regression in _iiPrintXXX when printing to RAM where the printing would begin at the second byte.
- Xwire: XwirePhys can now be done before starting Xwire
=================
== Version 4.3 ==
=================
24 Mar 2015
- HMI430: a button may now have "manual" and "toggle" combined.
- ARM: STM32 serial port lines weren't being correctly configured, the DR8 Xwire & RS485 ports weren't working; Changing interface no longer resets the port, it now just notifies the app and let's it do whatever it needs to.
- SEXI: All digital I/O's have been compacted so there are no unused lines. This means the Xwire table is now actual number of I/O's rather than blocks of 8.
- SPLat VM ARM:Any button press will now automatically turn on the backlight even if InputK isn't called.
- ARM VM: Permstore was not being correctly erased on program download and instead was returning a status of "success" but with all 0 bytes.
- The SEXI protocol could incorrectly report multiple InputK's as it wasn't confirming a change in sequence number from the slave.
- ARM: ComRunScript can now be called anytime to change MODBUS master scripts. The current transaction will finish before the new script starts.
=================
== Version 4.2 ==
=================
27 Feb 2015
- HMI430: SetBounds baseline calculation was incorrect and it wasn't lining up with SetCursor()
- HMI430 fixed drawing buttons with transparency (now released and pressed can have differernt transparencies, including 0)
- ARM controllers now support MODBUS master
- ARM Controllers: Dialect is now 101 for Countdown timer support
- HMI430: modes "disabled", "hidden" & "pressed" will now accept an integer. Any non-zero number is considered TRUE.
- HMI430: a button that is part of a group and pressed was now clearing other buttons if "group" was after "pressed", ie m:"p1g0" didn't work, but m:"g0p1" did. Now order doesn't matter.
- HMI430: background colour now defaults to black, text background to transparent
- HMI430: Now support the use of "v:" in ButtonEvent2(). Note a new version of ui_utils.spt is required.
- HMI430: SetFont can be called without arguments to return to the default system font.
- HMI430: changes to redraw meant buttons things like buttons weren't being erased as the background wasn't being redrawn.
- SEXI: after 8 tries, a disconnected peripheral will have it's reported inputs set to 0
- ARM dialect now supports legacy timers:
The next ARM dialect, 101, will include support for the "legacy timers", aka:
Start
Stop
Test
fSetTimer
fGetTimer
SetTimer
- HMI430: ensure a button can't be partially created if an event handler hasn't been specified. A bug manifested where the text was being changed on a button that hadn't been created and instead text was being changed on another button.
- HMI430: text background was not being drawn at a z-index 128; SetBounds() now ensures bounds cannot exceed the screen size.
- HMI430: can now handle 30 images, up from 20
- ARM: The maximum Xwire message is now 64 bytes rather than 32 bytes. This has been done to allow the DA8 to work as a SEXI device as it needs 35 bytes.
- SPLatOS: deregistering a serial port will now called a registered callback, allowing the current owner to clean up.
- EC1: The Xwire port may now be repurposed to user comms. The XwirePhys instruction does this, 0 = single wire Xwire, 1 = dual wire RS485, 2 = dual wire TTL. Both 1 & 2 use B14 & B15 for direction control.
- HMI430: fixed backlight off state as the backlight was very dimly flickering
- HMI430: SetBounds() with a width or height of 0 wasn't working.
- HMI430: SetBounds() now affects images, this allows part of an image to be drawn, useful for example when displaying a filling tank.
=================
== Version 4.1 ==
=================
29 Dec 2014
- SPLatVM: all InputK related instructions now correctly beep and trigger the backlight.
- SPLatVM: OBLCD now correctly uses the "off" level rather than the "high" level if the timer is set to 0.
- HMI430: buttons without an ID will now not be confused as button id:0
- HMI430: fixed, a held repeating button would cause a divide by 0 exception if the button was replaced by a non-repeating one.
- HMI430: if a button is disabled while being held it will now be treated as having been released.
- HMI430: id may now be any number from 0 thru 255, but there are still a max of 50 buttons. No id will be treated as 0.
- HMI430: SetCursor will now accept either one of x or y or both
- Xwire slave was crashing badly, a NULL pointer access.
- Xwire LCD now also works if the controller has a local LCD
- VM: boards that used custom output functions may not have had the outputs reset when SPLat/PC connected as "last" would probably be wrong (was a problem on the DR8 board)
- HMI430: printing text off the screen was causing a controller crash as double buffering wasn't trapping all oob errors.
- VM: disabled Xwire when SPLat download starts as SEXI would sometimes fire up part way though the flash erase and neatly perform a stack clobber causing a crash during app download. Also ensure USB firmware update stops Xwire (when it stops the VM). This work also modified the Xwire driver so a UART instance is only created when Xwire is started and destroyed when Xwire is stopped to ensure no lingering interrupt handlers and tx is disabled. Changing the Xwire interface now stops and restarts it, this seems the safest way to ensure no bytes are left lingering.
- SimpleHMI: Cls() has to do a "ResetBGErase" to ensure screens with no image and transparent background text are correctly erased.
- HMI430: ensure backlight timer is stopped if app requests none
=================
== Version 4.0 ==
=================
- added shadow to HMI430
- added dithering to difmake
- VM: fixed IO count reported to SPLat/PC, esp when the custom handler is twiddling within the default I/O range (eg: a LED on Out16 & Out17 is modified so 16 os On/Off and 17 is colour); fixed I/O count reported to SPLat/PC (Imatech was returning way too many analogue outputs)
- HMI430: fixed Xwire on 1311 build as the TX pin had incorrectly been set to opendrain meaning it wasn't sending anything; added RTC to 1311 build for software compatability even though it doesn't have a RTC.
- SHMI: group buttons can now also have a repeat rate, so can be held or pressed more than once
- VM: fixed compile error when FEATURE_VIRTUAL_LCD isn't defined
- SHMI: "Nothing" background "colour" is now '00010101
- SHMI: buttons can now specify a "sensitivity" which is the amount of alpha required for press detection (so may be 0)
- HMI430: added backlight cal.
- LPC4088: deregistering the serial port now restores the pins back to inputs and sets the serial direction back to recevie. This means when toggleing between 485 & TTL Xwire the 485 lines will revert to undriven.
- SHMI: moved text background to z-index 32 rather than 128 (ie the same level as text). This now ensures buttons won't be overwritten if a full screen cls() with colour is performed; temp disable screenshot file rename until the windows problem with it is fixed.
- SEXI: fixed a regression in reporting the number of i/o's.
- inf files can now be right-click installed.
- SHMI: fixed lockup if mode in ButtonEvent2 encountered an unknown char; fixed regression that was causing a background image to be obliterated with black,
- VM: fixed display of large, eg 10,000,000 floating point numbers as they may have had 1 added to them due to incorrect rounding).
- SHMI: will now display a char even if it only partly fits the bounds
- HMI430: RTC reset detect tweak; clock now set to 1/1/2000 if power lost
- VM: fixed InputMK to actually read the latch (is was reading the raw inputs)
- SHMI: added IgnoreDimPress to SetBacklight; backlight state now reported, off, med, high.
- SHMI: button pressed is now "p1" rather than just "1".
- SHMI: text now does a better job erasing stuff underneath and re-drawing stuff above
- SHMI: Cls now erases using the current colour if it's not transparent
- HMI430: backlight is now 3 stage; LCD now turned off when backlight turns off.
- button alpha is now % or 0-255
- RTCWriteDN: call this to set the DOW based on the current values in the RTC registers
- HMI430: buttons are now a solid colour with offset border.
- SHMI: HMI Reset() now sets the default background colour which is separate to the current background colour. This makes it possible to have text with a transparent background and erasing will work; Width can now be specified as %.
2. Drag and Drop
No special program is required to update the firmware.
In the description below, replace “HMI430” with “HMI430B”, “HMI700” or “HMI700B” as appropriate.
The “B” variants are the same as the non-B variants, but run on a lower-spec processor due to the global parts shortage. They cannot run the same software.
- Open the HMI “System Firmware” folder that is in Computer | HMI430 | System Firmware.

- Extract the “hmi430.srec” file from the zip file you downloaded and drag it into the “System Firmware” drive.
- Wait about 60 seconds for the update to complete.
If you’re not sure what you want, give us a call: +61 3 9773 5082