Advanced Vehicle Technologies, Inc. - AVT-440 Firmware
ADVANCED VEHICLE TECHNOLOGIES, Inc.

AVT-440
Firmware Version Descriptions
Updated: 13 November 2024

Version 0001
Release date: Never released. Very early testing only.

Version 0002
Release date: 4 October 2018
Initial release including fully operational functional "Read ID" function.
Manual is in 'Draft' status - but is available.

Version 0003
Release date: 3 November 2018
Taken from version: 0002.
Changed the start-up response to '92 40'.  (It was '92 3A' which was wrong.  '3A' is for the AVT-423.)
Changed start priority to 46.
Disabled the TCP Ethernet "Nagle Algorithm".  Doing so greatly improved the command / response turn around time as measured at the client computer using Wireshark.
For example, command to response time for the '42 03 01' "Read ID" function went from about 190 msec to about 28 msec.

Version 0004
Release date: 3 December 2018
Taken from version 0003
Completely re-organized the variables with the goal to enable dual channel operations.
All channel specific variables are in a structure.
Fixed the "App Name" issue.  The application name and firmware version number now appear in the IP_Setup and Auto_Update window as well as announced via the debug port on reset.
I no longer turn off the +9.3 vdc supply when the "Read ID" function completes.  Instead I disable channel 0.
The user has to enable +9.3 vdc supply when first starting out.  But after that each bus can be enabled and disable using the '4x 06' command.
When disabled, the bus is turned off.  Therefore a Slave device is protected from possible damage when plugging into or being removed from a bus.
Added the following commands:
'4x 06' - disable / enable a channel.
'4x 07' - command pause
'4x 08' - write to Slave NO read.
'4x 09' - write to Slave with read (of Slave immediate response).

The manual has been updated.

Version xxxx
Release date: xxx
Taken from version xxx

Version 0101
Release date: 6 August 2019
Taken from version 0004
Major changes in this revision.
Removed the '4x 02' command to control DSI Bus Master bus supply voltage.
Changed name of many DSI variables.  Changed name of many DSI functions.
Added all the PSI variables and functions.

Version 0102
Release date: 11 August 2019
Taken from version 0101

Changed several PSI commands by removing the channel byte. I did this so that many PSI commands would 'look' the same as their functionally similar DSI commands.
Some DSI and PSI commands still include the channel number because these commands are useful for testing.

The manual has been updated.

Version 0103
Release date: 29 August 2019
Taken from version 0102

Corrected an error in the '4x 11' command.
Corrected an error in the responses sent to the client when the PSI Read ID function aborts.

Version 0104
Release date: 29 September 2019
Taken from version 0103

Added two new commands:
'4x 20' DSI Read ID function, returns only one response.
'4x 21' PSI Read ID function, returns only one response.
Corrected the responses to the '4x 03' and '4x 04' commands.
The part number bytes were swapped.
Previously, the low order byte was returned first.
Now the high order byte appears before the low order byte in the response.

The manual has been updated.

Version 0105
Release date: 17 October 2019.
Taken from version 0104.

Added two new commands to support both forms of PSI5 Read ID for SMA7 sensor devices.

The manual has been updated with these two new commands.

Version 0106
Release date: 7 November 2019.
Taken from version 0105.

Added a new command to control the external AVT-441 'DSI3 Boost Circuit' device.

Added new commands for PSI5, SMA6, programming function.
Supports both single and dual channel sensor devices.

The manual has been updated with the new commands.

Version 0107
Release date: 18 November 2019.
Taken from version 0106.

Added new commands for DSI3 programming function.
Support single channel sensor devices only.

Version 0108
Release date: 5 January 2020
Taken from version 0107

Added new commands for PSI5, SMA7, programming.

The manual has been completely re-written and updated with all the commands and all the responses, including the many possible error responses.

Version 0109
Release date: 29 January 2020
Taken from version 0108

Added a keep alive counter to the syslog keep alive message.

Corrected error response in "sub_210.cpp", line # 1309.
Was: '22 23 62' now: '22 23 17'.
For PSI5 test data, changed the initial values.
Pre, Post, and Negative deflection test data is now 0x01FF (maximum positive value).
Positive deflection data is now 0x0200 (maximum negative value).

For DSI3 test data, changed the initial values.
Pre, Post, and Negative deflection test data is now 0x7FFF (maximum positive value).
Positive deflection data is now 0x8000 (maximum negative value).

In PSI5, SMA6, programming, when collecting async data, changed the default time out value to 20 msec.

For PSI5, added the '4x 13' command to allow the Client to change the data collection time out value.

Version 0110
Release date: 3 February 2020
Taken from version 0109

Changed the size of FIFO2 to 2048 bytes to prevent a FIFO2 overflow when dumping data to the client.

Changed the beginning of the PSI5 SMA6 test sequence.
Changed the beginning of the PSI5 SMA7 test sequence.
If initializing the transceiver channel 1 for operations fails - then abort.
If incorrect response from sensor at fast init comms - then abort.
No sense continuing to test if I can't initialize comms with the sensor.
Nothing will work after that.

Version 0111
Release date: 7 February 2020
Taken from version 0110

PSI5 data collection. Added a separate count variable for each block of collected data.
That way I have a count of actual valid, collected data.
Changed the data reporting command (4x 36) to use that count when computing averages and to compute response length for reporting data.

Shortened the timeout in the PSI5 async data collection loop.
I was waiting too long and probably missing data responses.
(The responses were probably going into other receive buffers, that I don't read.)

Lots of work on DSI3 programming.
Put in separate data counters for each data collection type.
Updated the data reporting routine to report number of data values collected and compute the averages correctly.
Only report valid data to client.

Put a fail timer in the data collection sections.

Put in the '4x 0E' command to set the data collection time-out value.
Empirical testing indicates 10 msec is plenty of time.
When I set the timeout to 3 msec, I only collect 6 samples. (Ten samples is the full load.)

Removed the 'error_no_exit' decision from all 'dsi_xfer_start' calls.
If the transfer fails, then immediately halt and exit the sequence.

Version 0112
Release date: 23 March 2021
Taken from version 0111

DSI3 programming. Previously, the delay between steps of the ETest sequence was fixed at 7+1 msec.
The customer requested I allow the Client to change that delay.
I added the variable 'dsi_etest_delay'.
I added the '4x 0F' command to allow the Client to change that value.

Version 0113
Release date: 11 October 2021
Taken from version 0112

Renamed multiple files in the '2xx' and '3xx' ranges.
They now start with '00'.
The '2xx' range is now full.
The '3xx' range now has room to grow.
I need more 'name room' for new files.

In 'sub_930.s' I changed multiple stackings to use the 'movem.l' command.
That should speed things up.

The customer has issued a PO for three new functions/capabilities for the AVT-440.

Task # 1: Entering PSI5 programming mode for an NXP sensor.
The phrase "programming mode" is confusing, but that is what they call it in the manual.
Some people call it "bi-comm" mode. It is 'not' the same as the 'programming' function where values are 'programmed' into the sensor.
In the manual I use the phrase "programming mode" but I try to be clear it is 'bi-comm' mode.

Implemented a 'report active mode' function.
I put the new function call into all commands that change an active mode.
I think this change is complete, but code review may show some changes can still be implemented.

Note that all (??) active modes are mutually exclusive.

Added the following commands:
4x 25 -- establish or terminate PSI5 bi-comm mode with an NXP sensor.
4x 26 -- read sensor register, by address.
4x 27 -- write sensor register, by address.

Lots of changes to how I set-up, enable, disable, and otherwise use the Elmos PSI5 transceiver device.
The Elmos device default set-up is:
time slot 1: 0 to 160 usec.
time slot 2: 160 to 320 usec.
time slot 3: 320 to 480 usec.

Task # 2: Read PSI5 startup or initialization responses.
When power is first applied to a PSI5 sensor, the sensor completes three internal initialization phases. During phase 2, the sensor transmits a lot of data.
This new function reads and stores that data.
The Client can then request that initialization (or start-up) data.

Updated LOTS of error codes.

The manual has been updated.

Version 0114
Release date: 12 October 2021
Taken from version 0113

Removed the '52 28 FF' response. It was unnecessary and confusing.
Changed the '4x 26' command so that the response contains the first register address.

Version 0115
Release date: never released
Taken from version 0114

This version was 'officially' released as version 0116.
See version 0116, below, for a summary of changes.

Version 0116
Release date: 16 November 2021
Taken from version 0115

The customer noted that the manual (and the firmware) used references such as: 'DSI3 SMA6'.
That is incorrect. DSI3 sensors are NXP and NXP does not use the 'SMAx' nomenclature.
SMAx is Bosch.
These errors stem from all the confusion from the early days of this project.
References to DSI3 (NXP) sensors should use 'Single' or 'Dual' - for the number of sensor channels.
I cleaned up the manual and made many changes to the code in an attempt to fix all of that.
I then rebuilt and tested the code in an attempt to be sure I was starting out with a good known project.
If any old naming issues are found in the future I will make an effort to fix them.

Task # 3: Added support for programming a DSI3 dual axis sensor.
(Previous DSI3 programming support was for a single axis sensor.)

Existing commands '4x 41' and '4x 42' are valid for programming groups 'A' and 'B'.
Implemented new commands to store the values to be written to sensor memory.
'4x 48' - DSI3 programming values group 'C'.
'4x 49' - DSI3 programming values group 'D'.

Added new programming support commands.
'4x 4A' - DSI3 dual axis programming control.
'4x 4B' - DSI3 dual axis query for read/stored data.
'4x 4C' - DSI3 dual axis query for stored test data.

Added a 100 msec overall delay to the existing DSI3 single axis programming function.

Added a check for 'dsi_pgm_no_lock' when looking for the response to the lock command when that command is not executed.

Version 0117
Release date: 15 December 2021
Taken from version 0116

PSI5 read initialization (start-up) info.
Added a new 'read initialization info' command to read both phase 2 and phase 3 initialization (start-up) information. Previously I put in the PSI5 'read initialization info' function.
That function reads only phase 2 information.

Added the new '4x 2A' command to read PSI5 phase 2 and phase 3 initialization information.

Changed error response from: '22 27 32' to: '22 28 24'.
Added new error codes:
-- '2x 28 31' thru '2x 28 42'.

Found and corrected an error in the response to the '41 2A' command.
I discovered that I was not properly initializing all variables prior to starting some functions. I fixed that.

Side note: In the code I call it 'startup'. But it is really 'sensor initialization' phase 2 and phase 3.
I tried to fix that in the manual.
I should rename variables in the code (where I use "_su_") - but I am probably not going to spend my time on that.

The manual has been updated and is available.

Version 0118
Release date: 16 July 2022
Taken from version 0117

DSI3: Added the '4x 40' command to specify the number of data points to collect during testing after programming.

The manual was updated.

Version 0119
Release date: 17 July 2022
Taken from version 0118

Updated the '4x 40' commadn to re-compute the data collection time-out value.
The user does not have to worry about that time-out issue.
The following formula is used: time-out = cnt + 10 msec.
(I should have included this feature in the '0118' version, but didn't think of it in time.

The manual was updated.


Version 0120
Release date: 6 August 2022
Taken from version 0119

Fixed the '43 27 rr ss' command to write to an NXP register while in programming mode in PSI5 operations.

The manual was NOT updated.


Version 0121
Release date: 29 August 2022
Taken from version 0120

Added the ability to collect operational data from an NXP sensor after collecting all the startup initialization data (phases 2 and 3).
Modified the '4x 2A' command to allow the Client to specify the number of operational data points to collect.
Added the '4x 2B' command to request the data collected from the '4x 2A' command.

The manual was not updated.


Version 0122
Release date: not released
Taken from version 0121

This version was only created to conduct timing tests.


Version 0123
Release date: 8 October 2022
Taken from version 0121

Corrected an error in the '41 2A' command/query.

The manual has been updated and posted.


Version 0124
Release date: 22 February 2024
Taken from version 0123

Added the user Bi-Comm mode for Bosch PSI5 sensors. (Very similar to the existing NXP function.)
Created a new PSI5 'send sync' routine. The previous routine was too long (15 vs 12 usec). I discovered that the previous routine did not disable interrupts. I believe I corrected all calls to use the new routine. I believe I removed the previous routine.
Corrected NXP_bi_comm_terminate.
I made the Bosch bi-comm response simpler than the NXP response.

A customer noticed a 'problem' where an AVT-440 would not operate on PSI5 immediately after power-on. A simple 'F1 A5' reset would solve the problem.
I tracked it down to this: On power-up some (only a few) PSI5 transceivers would store a 'bus over-voltage' flag in error register '0x25'.
I 'fixed' the 'problem' by re-arranging the hardware init routine. See my notes in "main.cpp" under this version number.

The User's Manual has been updated and is available.


Version 0125
Release date: 3 May 2024
Taken from version 0124

Changes to fixed time delays in communications with SMA6 and SMA7 sensors.
I found a number of fixed time delays in the code that were inconsistent (some of the delays were fixed at 140 usec and some at 160 usec.
I created a time delay variable, initialize it to 170 usec.
I changed all the code to use that variable.
I created the '4x 1E' command - for SMA6 sensors, to change the time delay.
I created the '4x 1F' command - for SMA7 sensors, to change the time delay.

More testing revealed that SMA7 programming, using this version of firmware does not work. The problem appeared to be in the method of initializing the PSI5 transceiver. I was doing it differently in different places.
I re-used these two error responses:
22 26 01
22 26 02
I removed this error response:
22 26 03

The manual has NOT been updated.
(I will update it as soon as I can and correct this posting.)


Version 0126
Release date: 14 August 2024
Taken from version 0125

Originally this was a 'test version' and was not intended to be released.
I modified the '4x 2D' read command to fill the data field with zeros.
(In versions '0124' and '0125' I filled the data field with ones.)
I also added debug statements so that I could 'see' the final full size command going out on the PSI5 bus.
The customer was having trouble reading a specific register and I wanted to verify that my PSI5 bus command 'looked' exactly the same as what Bosch was telling the customer.
I was able to verify that my code generated the exact same PSI5 bus command as what Bosch was using.
I removed the debug statements and left the '4x 2D' code with the data field filled with zeros. I sent a copy of this version to the customer for testing.
This version worked and the customer was able to read the register correctly and was happy with the results.
At that point it became a "released" version.

The manual has been updated with the changes from version '0125'.
There are no manual changes required for version '0126'.


Version xxx
Release date: xxx
Taken from version xxx

notes here


Version xxx
Release date: xxx
Taken from version xxx

notes here


Version xxx
Release date: xxx
Taken from version xxx

notes here


Version xxx
Release date: xxx
Taken from version xxx

notes here



Site Map