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

AVT-423
Firmware Version Descriptions
Updated: 21 October 2023

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


Version 0002
Release date: Never released. Early testing only.


Version 0003
Release date: 4 August 2016
Taken from version: 0002.

First 'real' release.


Version 0004
Release date: Never released.
Taken from version 0003.


Version 0005
Release date: 22 January 2017.
Taken from version 0004.

Moved all TCP/IP functions to interrupt driven routines.
That removed all application delays associated with reading data from the control computer.
Added support for LIN0 and LIN1.
Some corrections to CAN commands and other CAN routines.


Version 0006
Release date: 4 July 2017
Taken from version 0005

Lots of changes and updates. Corrected many CAN control bits: IDE, RTR, EDL, and BRS.
Commands affected: 0x (transmit), 7x 18 (periodic message set-up), 7x 2A (object set-up), 7x 2C (object mask).
Error checking for invalid CAN bit definitions.
Updated error responses.
Increased number of CAN periodic messages to 48 (each CAN channel).
Moved the CAN timer update routine to an assembly language routine to speed it up.
Some Flexray routines have been implemented (comms between the Netburner CPU and the Flexray CPU).


Version 0007
Release date: 5 July 2017
Taken from version 0006

No general release. Only released to one customer for testing.
Primarily changes to FIFO2 manager. Investigating problems a customer has encountered.


Version 0008
Release date: 25 July 2017
Taken from version 0007

No general release. Only released to one customer for testing.
Rewrote tcp_error_manager. Changes to fifo2_manager. Corrections to fifo2_manager. Changes to tcp_rcv_manager task. Changed TICKS_PER_SECOND to 100. Changes to predef.h and constants.h. Rebuilt all system files. Rewrote CAN0 and CAN1 protection code when updating receive message fifo pointers and flags.


Version 0009
Release date: 30 July 2017
Taken from version 0008

Added SysLog feature; messages are broadcast (no ip address specified).
Lots and lots of changes. Primarily in how data is moved into FIFO2 and how it is moved off the board to the client. Created a new tcp send task. Re-ordered the priority of the three tasks. The three tasks are, in order of priority (high to low): tcp send, tcp receive, and usermain. Corrections to a number of commands and responses. At least one new error response, one error response corrected, and one error response deleted.

The User's Manual has been updated and posted.

For CAN2 and CAN3, if the "error counter ii" rolls over (any element therein), that CAN channel is NOT reset (it used to be), only the client is notified of the condition but operations continue un-interrupted. Completely re-wrote the two tcp tasks and the fifo2_manager routines.
Users are encouraged to load this new version of firmware and work with it. It is much more reliable and moves data quicker.

Users are invited to let me know of any problems, questions, or corrections that need to be addressed.


Version 0010
Release date: 8 August 2017
Taken from version 0009

Converted to new development system (2.7.7).
Corrected /CS4 timing parameter.
Moved periodic message timers to FAST SRAM.
For all CAN channels removed the 'auto reset' feature from the error managers. Now I only inform the user that an error occurred. The user is responsible for handling recovery of the CAN channel.


Version 0012
Release date: 14 November 2017
Taken from versions 0010 and 0011

Version 0011 was never released. Major upgrade from previous versions. Lots of changes to improve code efficiency and maintainability. Cleaned up many routines. Corrected many errors. (Details can be found in notes in "main.cpp".)
Biggest change of note is the addition of ISO 15765 support for CAN0 and CAN1.
The following previously existing commands were changed and are not compatible with previous versions.

0x - transmit command
11 xx - transmit command
12 xx yy - transmit command
7x 2A - object set-up ID command
7x 2C - object set-up acceptance mask

New commands
7x 05 - object set-up
7x 06 - object set data
7x 07 - transmit status
7x 08 - transmit acknowledgements
7x 0E - outbound flow control separation time
7x 27 - padding
7x 28 - object pairing

The User's Manual has been updated and posted.

As always - if you find an error in the manual, please let me know so that I can correct it.
If you have any questions - contact me. I will answer as quickly and as best I can. Call if you need a fast answer.


Version 0013
Release date: 26 November 2017
Taken from version 0012

Corrected several errors in the CAN mask command (7x 2C).
Corrected an error in the CAN acceptance ID commands (7x 05 and 7x 2A).


Version 0014
Release date: never released
Taken from version 0013

One correction to an ISO15765 processing routine.


Version 0015
Release date: never released
Taken from version 0014

One correction to an ISO15765 processing routine.


Version 0016
Release date: 12 March 2018
Taken from version 0015

Considerable re-work of all the ISO15765 processing routines.
Changed the defined states.
Corrected the non-zero block size functionality.
Incorporated changes from versions 0014 and 0015.
A number of other changes to correct or improve ISO15765 message processing.
Removed a few "22 5F xx" error responses and added a few others.

The User's Manual has been updated and posted.


Version 0017
Release date: 15 March 2018
Taken from version 0016.

Lots of changes on how errors are detected and handled for CAN0 and CAN1.
Previously certain failure conditions would result in a non-stop (fast) series of error responses to the client.
CAN0 and CAN1 error registers are now monitored by a polling routine (not interrupt driven).
Those two channels are monitored on a alternating basis.
If a 'bus off' condition is detected: a 'bus off' message is sent to the client, the CAN channel is reset, and a reset response is sent to the client.
There were also changes to the '7x 0A' and '7x 0B' baud rate routines to stop writing fixed values.


Version 0018
Release date: 22 April 2018
Taken from version 0017.

For CAN0 and CAN1:
The timing register load values were changed to put the number of time quanta and the sample point more in line with CAN-CiA recommendations.

For CAN2 and CAN3:
A new CAN-FD IP core version was introduced.
For core version '0004' the CAN clock was 128.0000 MHz.
For core version '0010' the CAN clock is 160.0000 MHz.

The firmware was updated to query for the core version number to determine CAN2 and CAN3 timing register load values.

The timing register load values were changed for both the previous and the new core to put the number of time quanta and the sample point more in line with CAN-CiA recommendations.
CAN-CiA recommends the sample point be at nominal 87.5% (85% to 90%); where possible.

The User's Manual has been updated and posted.


Version 0019
Release date: 30 May 2018
Taken from version 0018

Real world testing indicated that the new sample points were not working very well.
Changed all CAN sample points back to 75% (where possible). Bench testing indicates this works much better. Time in the real world will be the real test.
(I do not know why the 87.5% sample point does not work, but it doesn't.)

Experience with the AVT-718 and AVT-85x products would seem to indicate that a 75% sample point is 'good' - that is where (I believe) the sample point is for those interfaces.

Added the new '24 97 0y rr tt' error response for CAN2 and CAN3. 'y' is the CAN channel number. 'rr tt' are the Classical CAN receive and transmit error counters.

The User's Manual has been updated and posted.


Version 0020
Release date: 10 October 2018
Taken from version 0019

Implemented ISO 15765 for the CAN-FD channels (CAN2 and CAN3).
Channels CAN2 and CAN3 now have 16 receive objects and 16 transmit objects.

New command '7x 17' is used to set-up a transmit object.
You must now include the object number in the transmit command. (Previously it was zero and ignored.)
The '7x 30' command to query for and control 'AE' byte use was in previous releases but was not documented in the manual.

The following commands have been updated to include channels 2 and 3:
...'7x 0E'
...'7x 17'
...'7x 27'
...'7x 28'
...'7x 30'
The maximum transfer size for CAN2 and CAN3 is currently limited to 8192 bytes.
That can be increased if necessary. Use with real modules will tell me what limit is necessary and appropriate.

There is still some testing that needs to be completed including large block transfers and timing tests (with regards to compiler optimization level).

The User's Manual has been updated and posted.


Version 0021
Release date: 17 October 2018
Taken from version 0020

Corrected an error in ISO15765 transmit buffer manager routine for CAN2 and CAN3 in how consecutive frames were constructed.

The User's Manual has been updated and posted.


Version 0022
Release date: very limited release 7 November 2018
Taken from version 0021

Added the '7x 63' command. See version 0023 below.


Version 0023
Release date: 15 November 2018
Taken from version 0022

Corrected the '7x 63' command.
The new '7x 63' command allows the user to set the number of transmit attempts channels CAN2 and CAN3 will make before aborting the transmission and discarding the message.
The default value for both channels is 400 attempts (0x0190). A value of '0x0000' means continuous attempts (no limit).

Other changes include:
Conducted timing tests of two routines while varying the compiler optimization settings. Decided to continue to use optimization level 2.

Corrected the "AppName" issue. The model number and firmware version number now appear in both the IPSetup and AutoUpdate functions.

Minor changes to the periodic message manager routines to try and improve processing speed.

Investigated, but did not implement, the disable Nagle algorithm (function) for Ethernet traffic from the AVT-423 to the client. In high volume situations I feel this would needlessly increase Ethernet network traffic and reduce network efficiency.

The User's Manual has been updated and posted.


Version 0024
Release date: 13 December 2018
Taken from version 0023

Corrected an error in the '7x 27' command.
I was not saving the new pad byte value if it was a disable padding command.

No manual update required.


Version 0025
Release date: 12 January 2019
Taken from version 0024

Completely re-vamped CAN2 and CAN3 ISO 15765 processing routines.
Added the '7x 29' command which allows the user to specify the 'max_dlc' value to use in processing ISO 15765 CAN-FD transmit frames.

The User's Manual has been updated and posted.


Version 0026
Release date: 17 January 2019
Taken from version 0025

Corrections to channels CAN0 and CAN1 periodic message managers. Minor changes to CAN0 and CAN1 transmit managers.

A problem was discovered with CAN0 and CAN1 periodic messages. If they were run at an interval of about 10 msec or less, the message would cease after only a few seconds. The message would resume if a transmit command was processed. That problem was corrected with this release.

No manual update required.


Version 0027
Release date: 11 February 2019
Taken from version 0026

Corrections to the 'F1 A5' reset command processing routine. It was discovered that on fairly rare occasion the execution of that command could 'lock-up' the AVT-423. The interface would become un-responsive.

No manual update required.


Version 0028
Release date: 22 March 2019
Taken from version 0027

In the hardware initialization routine I added the call to enable the passive pull-up to UART0 receive data line. UART0 is the serial debug port. The pin was floating; which was wrong.

No manual update required.


Version 0029
Release date: N/A
Taken from version N/A

This version number was skipped.


Version 0030
Release date: 25 March 2019
Taken from version 0028

Two changes.
1. Added the ability to have multiple clients connect to and communicate with the AVT-423. I do not allow multiple clients to connect to a single port number. Instead, I have allocated Port # 10001 (as before), Port # 10002, and Port # 10003 for client connections. All three ports operate identically. A client can connect to any one of them, as desired (assuming no one else is already connected to that port.

Commands from all three ports are processed as they arrive.

One important operational note. All responses from the AVT-423 are issued to all connected clients. For example, client #1 sets up a CAN receive object. All messages received through that object are passed to all connected clients. In other words, everyone sees all responses from the AVT-423.

2. Added the '5x 80' command to query for and store start-up parameters. This function allows the user to specify certain AVT-423 start-up parameters and store them in non-volatile memory. A 32-bit long word is stored in non-volatile memory. It is read whenever the AVT-423 initializes (power-on reset, or the 'F1 A5' software reset). The stored long-word is a bit map. At this time only bits 0 through 3 are used. They indicate the state of the CAN bus termination for channels CAN0 through CAN3 - respectively. A stored value of '1' indicates the CAN bus termination for that channel is enabled on start-up. Likewise, a '0' indicates the termination is disabled. The stored value does not take effect until the next reset following storing the new values.

All un-used (reserved) bits should be set to '1'.

The User's Manual has been updated and posted.


Version 0031
Release date: 24 April 2019
Taken from version 0030

Added the 'B1 03' command to query for model number. This will eventually replace the 'F0' command.

Added the 'B1 04' command to query for 'my' MAC address.

Fixed the '7x 04' command. If you queried for object status, that object would no longer receive.

(The 'mirror' function for CAN and LIN was developed for a customer.)

Added the CAN 'mirror' function for CAN0 and CAN1 only (at this time).
(Channels CAN2, CAN3, and LIN are pending.)

Added three new commands to support the CAN 'mirror' function.
'7x 20' to specify the receive ID.
'7x 21' to specify the transmit ID.
'7x 22' to disable/enable the CAN 'mirror' function.

The manual was not updated.


Version 0032
Release date: 6 May 2019
Taken from version 0031

Added the CAN 'mirror' function for CAN2 and CAN3.

The User's Manual has been updated and posted.


Version 0033
Release date: 22 May 2019
Taken from version 0032

Fixed the CAN0 and CAN1 receive manager. If RTR is true, the 'mirror' function is not executed.
(A CAN RTR frame is NOT 'mirror'ed.)

Fixed two error responses for CAN2 and CAN3 receive manager.
Those responses were '22 7F 25' and '22 7F 26'. But there was a conflict as those two error responses were already defined.
They were changed to '22 7F 21' and '22 7F 22'.
The definitions for '22 7F 25' and '22 7F 26' were updated.

Removed an un-used LIN checksum variable/flag. Corrected at least one LIN routine related to the use of that variable.

Added the LIN 'mirror' function for LIN1 and LIN0.
Added two new commands for this function.
'5x 11' is the setup command.
'5x 12' is the disable/enable command.

The User's Manual has been updated and posted.


Version 0034
Release date: 10 June 2019
Taken from version 0033

Very limited release.

Updated both LIN init routines to initialize all LIN variables. I discovered that some variables had been missed in the previous version.

In CAN0 and CAN1 init routines I corrected the value to write to 'errstat' to clear any and all pending error flags.

The response (to the client) to an 'F1 A5' reset command used to be:
'91 3A'
'94 04 xx yy'

The response (to the client) to an 'F1 A5' reset command is now:
'91 0F'
Note that the firmware version report has been removed. Did not make sense to send it.

I did this to allow the client to differentiate between a 'connect' response and an 'F1 A5' reset response.

One user has observed the AVT-423 complete a CPU reset for no apparent reason. It was observed to occur about once every half hour while the board was idle (doing nothing) or at some point after completing an 'F1 A5' reset. No more information available at this time.

The User's Manual was not updated. See next entry.


Version 0035
Release date: 12 June 2019
Taken from version 0034

Corrected an error in the LIN mirror function 'lin_mirror_xmt_mgr'.
Error would appear as: If the re-transmit ID showed up within 3 msec of the last byte of the first frame, then the re-transmitted frame would contain the ID byte in the data field.

The User's Manual has been updated and posted.


Version 0036
Release date: 6 September 2019
Taken from version 0035

I changed two parameters in how the microcontroller accesses the CAN-FD FPGA (CAN2 and CAN3). During testing using a customer supplied software application, it was possible that a received CAN frame 'appeared' to be a transmit acknowledgement and, hence, was discarded.

I changed the 'start-up' responses sent to the client. There are three different reasons a 'start-up' response is sent to the client. In previous versions they were all the same code. Therefore, it was ambiguous as to the reason the client received a 'start-up' response. A unique response has been assigned to each. They are:
Power-on reset: 91 0A.
An 'F1 A5' reset: 91 0F.
A client connection: 91 3A.

The User's Manual has been updated and posted.


Version 0037
Release date: 19 December 2019
Taken from version 0036

Very limited release; to one customer only - for testing.
Trying to track down one or more problems with CAN2 and/or CAN3 while ISO15765 processing is enabled.

Changed a number of '22 5F yy' error codes to '23 5F yy 0z' where 'z' is either '2' or '3' for CAN2 or CAN3.
The following '22 5F yy' error codes were changed: 43, 44, 45, 46, 48, 49, 4A, 4B, 4C, 4D, 4E, 4F, 50, 51, 52, 53, 56, 57, 58, 68, 69, 6B, 6C, 6D, 70, 71, 72, 73, 81, 83.

The "Nagle" algorithm or function has been disabled in the AVT-423.
Note that this only affects TCP packets send by the AVT-423 to the Client.
The Client is urged to disable the "Nagle" function for TCP packets sent by the Client to the AVT-423.

In the older Microsoft environment this was known as setting the parameter "TCP_NODELAY" to true ('1', one).
Exactly how this is done depends on the Client operating system and application development environment.

The User's Manual has NOT been updated, yet.


Version 0038
Release date: 21 December 2019
Taken from version 0037

Very limited release; to one customer only - for testing.
Still working on tracking down the CAN2 and CAN3 problems.
Lost frames, invalid '02 02 A2' and '02 03 A2' responses, and '23 5F 56 0y' errors.

The User's Manual has NOT been updated, yet.


Version 0039
Release date: 8 January 2020
Taken from version 0038

Very limited release; to one customer only - for testing.
Still working on the CAN2 and CAN3 problems.

I think I found the problem and implemented changes to CAN2 only.

The User's Manual has NOT been updated, yet.


Version 0040
Release date: 16 January 2020
Taken from version 0039

Customer testing seems to indicate that I found and solved the problems with CAN2.
Implemented the changes to CAN3. This version is still in customer testing.
I am confident that I have (finally) found the root cause of the problems and have fixed them.

The "Nagle" algorithm or function was disabled in the AVT-423 with version '0037'.
This only affects TCP packets send by the AVT-423 to the Client.

The Client is urged to disable the "Nagle" function for TCP packets sent by the Client to the AVT-423.
In the older Microsoft environment this was known as setting the parameter "TCP_NODELAY" to true (which is '1', one).
Exactly how this is done depends on the Client operating system and application development environment.

The User's Manual has been updated and posted.


Version 0041
Release date: Never released.
Taken from version 0040.

Added KWP support to the two K-line transceivers.
Basic transmit and receive functionality. Added format byte processing to the receive function. No periodic message support.

Moved to version 0042 before this could be released.


Version 0042
Release date: Never released.
Taken from version 0041.

Started work on changes to channels CAN2 and CAN3.
Changed my mind about how I want to proceed.
Dropped this version and moved to 0043.


Version 0043
Release date: 21 July 2020
Taken from version 0042.

Lots of changes and updates. These notes are a summary of all changes from version 0040.

Added KWP support for the two K-line transceivers.
KWP operations using the transceiver assigned to pin #23 of the DB-25P connector is known as KWP0 and is channel 8.
KWP operations using the transceiver assigned to pin #11 of the DB-25P connector is known as KWP1 and is channel 6.

Or, another way to look at this:
Pin # 23 of the DB-25P connector is either:
LIN0, channel 7
KWP0, channel 8

Pin # 11 of the DB-25P connector is either:
LIN1, channel 5
KWP1, channel 6

Updated many commands to support KWP operations.
At present, KWP operations are transmit and receive with format byte processing optional for receive operations.
There is no periodic message support, yet, for either KWP channel.
For channels CAN2 and CAN3 there are now 64 (decimal) receive and transmit objects available for use.
Note that this means there are 64 receive objects 'AND' 64 transmit objects.
The objects are numbered 0x00 to 0x3F.

(Note that channels CAN0 and CAN1 are different. For those two channels there are a total of 16 objects that can be configured for one operation or the other.)
(Channels CAN0 and CAN1 have not been changed or affected.)

Many commands have been updated to support the new objects. Those commands include:
'7x 04'
'7x 17'
'7x 27'
'7x 28'
'7x 29'
'7x 2A'
'7x 2C'
'7x 30'

There are several new formats of the transmit commands to support all the new objects.

The format of the transmit ack has also changed.
Refer to the manual for details on all the new, changed, and updated commands.

The User's Manual has been updated and posted.


Version 0044
Release date: Never released.
Taken from version 0043.

Corrected KWP receive message status bit 7.

The User's Manual has NOT been updated.


Version 0045
Release date: 22 November 2020.
Taken from version 0044.

Very limited release.

Modified the '7x 18' periodic message definition command to support KWP operations.
Put in some other KWP periodic message support routines.
None of that has been tested.
Removed a lot of volatile keywords from many LIN variables as well as FIFO3 and FIFO4.

The new AVT-424 board will be a mezzanine or daughter board to/for the AVT-423 board.
The AVT-424 will be mounted on top of the AVT-423.
The AVT-424 will add six new LIN channels to the AVT-423.
The new LIN channels are:
LIN2 thru LIN7.
They will be designated channel numbers: 'A' thru 'F'.

Started work on communications with the new AVT-424 LIN Expansion board.
It will use QSPI channel 1.
Removed many (all ?) references to Flexray.
Modified the following commands to recognize the new LIN channels.
'5x 01' - received checksum to client
'5x 02' - receive buffer timeout
'5x 08' - time stamps
'5x 40' - transmit ack
'5x 50' - LIN bus baud rate
'5x 52' - max frame time
'5x 5A' - checksum type
'5x 66' - 'ID byte only' error response
'5x 69' - disable/enable channel operations
'5x 7E' - short to ground counter
'7x 18' - define periodic message
'7x 1A' - disable/enable periodic message
'7x 1B' - periodic message interval
'7x 1C' - disable all periodic messages

Created the following new commands:
'21 30' - hardware reset of mezzanine board (AVT-424)
'21 31' - firmware reset of mezzanine board (AVT-424)
'5x 6B' - mezzanine board heartbeat blink rate
'B1 05' - request AVT-424 firmware version number
'B1 06' - request mezzanine board model number

The '7x 1C' command has been changed.
To disable ALL periodic messages, the command is now: '72 1C FF'

The User's Manual has NOT been updated.


Version 0046
Release date: 1 December 2020.
Taken from version 0045.

Very limited release.

Corrected the '7x 18' command to allow for zero length periodic message response to client.

Made some changes to several QSPI1 routines to correct AVT-424 comms failures.

The User's Manual has NOT been updated.


Version 0047
Release date: 10 December 2020.
Taken from version 0046.

Multiple changes to the code to correct the comms failure issue with the AVT-424 board using the DSPI1 channel.
Defined all DSPI1 registers. I now access those registers directly (do not use the 'sim2.dspi1.xxx' calls - they take too much time).

I changed the entire interrupt priority scheme. All interrupts have been downgraded by one level. There are no interrupts above level 6.
Critical routines are now wrapped with level '7' to block all defined interrupts.

Other changes were implemented with respect to how interrupt routines are defined. I removed all manipulations of 'clmask' in the interrupt controller.

Removed remaining references to Flexray. They were in the assembly language routines.

The User's Manual has NOT been updated.


Version 0048
Release date: 11 December 2020.
Taken from version 0047.

Identical to the last (final) version 0047.

I created this version so that there would not be any confusion with any other versions named '0047' that were used for testing.

The User's Manual has NOT been updated.


Version 0049
Release date: 1 February 2021
Taken from version 0048

Updates to KWP mode.

Corrected several periodic message routines.

Added the '5x 2A' command to adjust the inter-message time, "P3".
Added the '5x 46' command to specify the bus idle time ('W5')before a Fast Init attempt.
Added the '5x 47' command to specify the Fast Init low time.
Added the '5x 48' command to specify the Fast Init high time.
Added the '6x 13' Fast Init command and related function.

Tested all KWP functions.
KWP operations are now fully operational for KWP0 (channel 8) and KWP1 (channel 6)

Added the '22 1B ss' error response for UART1 (LIN0 and KWP0).
Added the '22 1C ss' error response for UART2 (LIN1 and KWP1).

The User's Manual has been updated and posted.


Version 0050
Release date: 8 February 2021
Taken from version 0049

One change to all CAN channels with ISO15765 processing enabled.
One customer reported a problem where the AVT-423 was transmitting consecutive frames a little faster than the inter-frame spacing as specified by the receiving device flow control frame.
To solve this I added the '7x 25' command to specify a time (1 msec increment) that is added to the time specified by the received flow control frame. The default is 0. For example, if the received flow control frame specifies an inter-frame spacing of 2 msec, and the client sets the "extra" time to 1 msec (using the '7x 25' command), then the AVT-423 will set the inter-frame spacing to 3 msec.

Added the '7x 25' command to specify the extra time for inter-frame spacing when transmitting a multi-frame message.

The User's Manual will be updated and posted as soon as possible.


Version 0051
Release date: 4 April 2021
Taken from version 0050

For testing only. Never released.
Customer experience indicates fifo2 overflows and CPU crash; possibly due to fifo2 overflow.
This occurs under extremely heavy traffic moving from the AVT-423 to the client.
Revamped the main loop. Added additional calls to fifo2 manager.
Added 'overrun' space to fifo2.
Added additional buffer space to tcp send buffer.
Changed '21 03' error code for fifo1 overflow to:
'22 03 01' for fifo1p1 overflow.
'22 03 02' for fifo1p2 overflow.
'22 03 03' for fifo1p3 overflow.


Version 0052
Release date: 5 April 2021
Taken from version 0051

For testing only. Never released.
Changed the CAN_B receive manager. If fifo2 can not hold a response, I exit the routine.
Added a 'syslog' call to CAN_B lost frame manager. This might be the only way I can watch for lost frames.


Version 0053
Release date: 15 April 2021
Taken from version 0052

A customer reported that occasionally, under high traffic, the AVT-423 stops responding, the Ethernet connection is lost, they cannot establish a new Ethernet connection, the CPU heartbeat LED has stopped, and the only way to recover is to power cycle the AVT-423.

Lots of changes.
Modified tcp1_send_task.
If I get 5 write failures in a row, I close the connection.
If a keep alive error is detected, I close the connection.
If a receive error is detected, I close the connection.
I reviewed all the source files.
If any routine writes to fifo2, they first check to see if fifo2 can hold it.
If not, the write is either ignored (lost) or left pending.

A LIN lost frame counter is implemented as well as a LIN lost frame manager.
Added new error responses for LIN:
LIN0: 23 3A xx yy: 'xx yy' is the lost frame counter.
LIN1: 23 3B xx yy: 'xx yy' is the lost frame counter.
Added a 'syslog' call in the LIN lost frame manager.

A KWP lost frame counter is implemented as well as a KWP lost frame manager.
Added new error responses for KWP:
KWP0: 23 3C xx yy: 'xx yy' is the lost frame counter.
KWP1: 23 3D xx yy: 'xx yy' is the lost frame counter.
Added a 'syslog' call in the KWP lost frame manager.
Added a new KWP error response:
22 3F xx - where 'xx' is the channel id in KWP lost frame manager.

If a buffer42 packet does not fit into fifo2, it is deleted.
Added a buffer42 lost packet error response.
23 3E xx yy: 'xx yy' is the count of lost packets.
Added a 'syslog' call in the buffer42 lost frame manager.

If no client connection exists, there will be no 'syslog' transmissions.

The User's Manual has been updated and posted.


Version 0054
Release date: 7 May 2021
Taken from version 0053

Added support for long periodic messages for channels CAN2 and CAN3 (CAN-FD).
Since the '7x 18' periodic message definition can not support a data field of more than 8 bytes, a new command was implemented.

New command to define a periodic message for channels CAN2 or CAN3 with 0 to 64 bytes in the data field.

Command format. (Either form is valid.)
--------------
11 bb 2r y0 pp tt vv ww zz mm nn ...
12 00 bb 2r y0 pp tt vv ww zz mm nn ...

11 or 12 - is the header for a long command.
bb - count of bytes to follow.
2 - indicates a long periodic message command.
r - channel number, 2 or 3.
y - b7: IDE where 0 = 11-bit ID or 1 = 29-bit ID.
. - b6: RTR where 0 = not an RTR frame or 1 = is an RTR frame.
. - b5: EDL where 0 = Classical CAN frame or 1 = CAN-FD frame.
. - b4: BRS where 0 = normal for entire frame or 1 = high speed data field.
pp - periodic message number $00 to $2F.
tt vv - 11-bit ID.
tt vv ww zz - 29-bit ID.
mm nn ... - data field (0 to 64 (decimal) bytes).

Query format. (Either form is valid.)
------------
11 03 2r 00 pp
12 00 03 2r 00 pp

11 or 12 - is the header for a long query.
03 - count of bytes to follow.
2 - indicates a long periodic message command.
r - channel number, 2 or 3.
00 pp - periodic message number $00 to $2F.

Notes
-----
- A long form definition command will always yield a long response.
- A long form query will always yield a long response.
- A short form query (7x 18 query) will yield a short form response if the data field is less than or equal to 8 bytes.
- A short form query (7x 18 query) will yield a long form response if the data field more than 8 bytes.
- Data field length 'must' be a defined CAN-FD length. An invalid data field length will yield a command error. The valid data field byte counts are:
- 0 to 8 bytes (inclusive), 12, 16, 20, 24, 32, 48, 64.

The User's Manual has been updated and posted.


Version 0055
Release date: 8 July 2021 (limited release)
Taken from version 0054

Corrected several errors in the '7x 17' command.

The User's Manual was not updated.


Version 0056
Release date: 14 August 2021
Taken from version 0055

IMPORTANT NOTE:
The maximum number of CAN periodic messages has been reduced to 32 (decimal).
(previously, the maximum was 48 (decimal).)
For all CAN channels, periodic messages are numbered: 0x00 to 0x1F.

Added EDL and BRS checks to several commands.
If BRS is '1', then EDL must also be '1'.

Added the 'Frame Buffer' capability for channels CAN2 and CAN3 only.
Added the following 'Frame Buffer' commands:
7x 50
7x 51
7x 52
7x 53
7x 54

The User's Manual was not updated.


Version 0057
Release date: 7 September 2021
Taken from version 0056

Some changes to how I update various timers. An attempt to save some CPU time.

Added a transmit echo feature for CAN2 and CAN3 only.
When enabled,this forces the AVT-423 to echo the received copy of transmitted CAN frames.
The echo includes the time stamp of when it was received. When enabled.

Added a new option to the '5x 40' transmit ack command.
The new option allows the Client to select 'echo' for channels CAN2 and CAN3 only.

The transmit echo function, when enabled, will only echo CAN frames transmitted by a transmit command or a Frame Buffer operation.

As a consequence of implementing the transmit echo function, several routines were updated. My testing shows these routines are functioning properly. However if a user discovers a problem, let me know and I will fix it as quickly as I can.
These functions were affected: storing a long periodic message, CAN mirror function.

Added the '5x 06' command. When enabled, the AVT-423 will report all received CAN frames in long format (12 xx yy) format always.

Updated several error messages.

The '7x 08' command is now deprecated and will be removed soon.
The Client should use the '5x 40' command.

Previously the '7x 05' command was declared to be deprecated. It will be removed soon.

Previously the 'F0' command was declared to be deprecated. It will be removed soon.

The User's Manual was not updated.


Version 0058
Release date: 24 September 2021
Taken from version 0057

Added a digital output feature.
A solid state relay is attached to the top of the AVT-423 board. It is controlled by the AVT-423 CPU through a command. The switch side of the solid state relay is connected to pins # 6 and # 19 of the DB-25P connector.

Added the '5x 05' command to control the digital output as well as clear or not clear the time stamp counter.
This allows the Client to send a digital output signal (rising or falling edge) that is synchronized to the clearing time stamp counter.

The User's Manual has been updated and posted.


Version 0059
Release date: 30 October 2021
Taken from version 0058

A customer noticed 'bad' data in several CAN-FD frames.
I re-wrote a portion of the interrupt service routine to add some time between consecutive reads of the CAN2 and CAN3 controller.
I believe this problem is related to previous problems with fast successive reads of the FPGA.
My suspicion is in the handshake signal NB_/TA

No manual update required.


Version 0060
Release date: 26 January 2022
Taken from version 0059

A customer asked me to add a fourth TCP port.
It is numbered '10004'.

Added new error response '22 03 04' for fifo1p4 overflow.

The User's Manual has not been updated, yet.


Version 0061
Release date: 6 February 2022
Taken from version 0060

A customer noticed a problem where, during heavy transmit activity, an occasional transmit command is 'lost'.
This happens only with CAN2 (probably also CAN3).
I modified the code flow in the transmit command processing routine (in sub_131).

No manual update required.


Version 0062
Release date: never released
Taken from version 0061


Version 0063
Release date: 23 February 2022
Taken from version 0062

A customer noticed that while receiving very heavy CAN traffic, I will sometimes miss/lose a byte on either LIN channel (LIN0 and/or LIN1).
I modified the code flow for the main loop. Spend a little less time servicing the CAN2 and CAN3 receive managers so that some time is available to service the LIN0 and LIN1 new byte processing function.
Added the '7x 09' command to set the maximum number of CAN frames to be processed by the receive manager before returning to the main loop.

In the early stages of trying to figure out the true source of the problem, I looked into and modified the number of buffers allocated to various TCP functions.
Added the '5x 31' command to give the Client access to the 'no push' and 'no nagle' settings.
Added the '2x 0E' error response for TCP configuration errors.

Some of the changes helped, but did not solve the problem.

At the same time as I was trying to fix the LIN problem - another customer asked me to put in a means of controlling the CAN transceivers - put them into standby mode.
I added the '7x 13' command to use four I/O ports on the FPGA to control the CAN transceivers 'STBY' pin.
The states of those I/O pins can be stored in non-volatile memory using the existing '5x 80' command.


Version 0064
Release date: 14 April 2022
Taken from version 0063

Lots of testing and code 'debug' functions while trying to figure how to solve the LIN missing byte problem.
I completely re-wrote all the routines having to do with servicing the two UARTS that are for LIN0 and LIN1.
Also re-wrote all the related KWP code.
Made lots of changes in variable organization and declarations to speed up processing.
Made lots of changes to main loop organization.
I removed ten error responses.

The User's Manual has not been updated, yet.


Version 0065
Release date: 28 April 2022
Taken from version 0064

Only released to one customer.

Modified the '7x 17' command processor.
If the command is 'short' form, then the response will be 'short' form.
Likewise, for the 'long' form command.
However, for a query, the response depends on the object number.

I added the '7x 01' command to allow CAN-FD operations using the original Bosch CRC method (otherwise known as non-ISO method).
Note that it was changed to the '7x 02' command in version 0068.

The User's Manual was not updated.


Version 0066
Release date: 8 October 2022
Taken from version 0065

Never formally released.
Added the '7x 5F' command to disable/enable the RC6 function for CAN2 and CAN3 periodic messages.

The User's Manual was not updated.


Version 0067
Release date: 14 October 2022
Taken from version 0066

Only released to one customer.
Added the 'long format response' only feature to CAN2/3 received ISO messages.

The User's Manual was not updated.


Version 0068
Release date: 19 November 2022
Taken from version 0067

Lots of changes.

Updates to the LIN receive routines related to disabling interrupts when updating FIFOs.
Changed a bunch of "if, else-if, .." statements to use a defined array -- as related to CAN-FD DLC defines.
Updated a lot of CAN2/3 ISO15765 processing routines, especially the transmit managers. Made the code cleaner and (hopefully) faster. All lessons learned from the AVT-425 project.
Removed the '7x 05' command.
Removed the '7x 08' command.
Added the '7x 01' command to query/set the ISO 15765 buffer timeout value.
Added the '7x 02' command to select non-ISO CAN-FD operations.
Changed the '23 5F 68 0y' error response to: '24 5F 68 0y ss'.
Removed 5 error responses.

The User's Manual has been updated and posted.


Version 0069
Release date: 12 December 2022
Taken from version 0068

Corrected an error in the '7x 0B' command when performing direct writes to the CAN2 or CAN3 core.
Previously, this command did not function for CAN2 or CAN3.

No changes to the User's Manual were necessary.


Version 0070
Release date: 6 February 2023
Taken from version 0069

With regards to the CPU -- FPGA interface.
Disabled external /FB_TA. That pin (J1-13, PA4) is now an un-used GPIO input.
Enabled internal Auto Acknowledge. Set the auto acknowledge to 72 nsec.
Removed all the 'nop' delays in the CAN2 and CAN3 interrupt routines.

This should finally fix the problem of errors when the CPU accesses the FPGA too quickly and the /FB_TA has not risen sufficiently to be in the not-active state.
Unfortunately, it took me a long time to figure out this problem and a solution that did not involve a change to the FPGA load.
The /CS4 chip select active time might be a bit long for many accesses, but at least it should stop the error and I was able to remove the 'nop' instructions. I am hopeful this will make it overall faster and more reliable.

No changes to the User's Manual were necessary.


Version 0071
Release date: 6 March 2023
Taken from version 0070
I discovered that the variable length DLC feature for CAN2/3 ISO15765 transmitting multiple frames - does not work.
The first frame was the correct length, but all consecutive frames were 0x40 bytes long.
The problem was corrected and tested.

The User's Manual has been updated and posted.

The changes to the manual were not related to firmware updates.
Rather the manual changes were to emphasize that the maximum supply voltage for the AVT-423 should not exceed +18 VDC.
I also updated the section on over-voltage protection to emphasize that the fuse would blow if the supply voltage exceeded about +20 VDC.


Version 0072
Release date: 28 April 2023
Taken from version 0071
No operations changes to the firmware.
A new build of both AVT-423 and Netburner CPU boards.
When I started putting them together and testing, I would occassionally notice an error when sending a block of data from CAN2 to CAN3.
The errors would be rare, maybe 4 out of every 200 transfers. The errors were very specific. That may only apply to my test scenario.
Troubleshooting revealed that the possible cause of the errors was either cross-talk or coupling between some of the signal lines connecting the CPU to the CAN-FD controller.
(That is the 32-bit wide FlexBus connection.)
The solution was to decrease the drive level of those signal lines.

One other minor change to the '7x 0A' command.
For all CAN channels, if you try to enable an un-initialized periodic message, the command will be refused and the '31 74' command error will be returned.
No updates to the User's Manual necessary.


Version 0073
Release date: 7 October 2023
Taken from version 0072
Added type2 periodic message support for channels CAN2 and CAN3 (only).
Type2 periodic messages are also known as sequential periodic messages.

The User's Manual has been updated and posted.


Version 0074
Release date: 21 October 2023
Taken from version 0073
Corrected errors in the type2 periodic message routines for channels CAN2 and CAN3.
Corrected several errors in the '7x 1A' and '7x 1C' commands.
Added type2 periodic message support for channels CAN0 and CAN1.

The User's Manual has been updated and posted.


Version xxxx
Release date: xxx
Taken from version xxx


Version xxxx
Release date: xxx
Taken from version xxx


Version xxxx
Release date: xxx
Taken from version xxx


Version xxxx
Release date: xxx
Taken from version xxx


Version xxxx
Release date: xxx
Taken from version xxx


Version xxxx
Release date: xxx
Taken from version xxx