Improve documentation and beatify pieces of code
This commit is contained in:
		
							
								
								
									
										31
									
								
								doc/source/firmware/hw-version-detect.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								doc/source/firmware/hw-version-detect.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					.. _hw_version_detect:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Automatic Hardware Version detection
 | 
				
			||||||
 | 
					====================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Functional Description
 | 
				
			||||||
 | 
					----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In order to automatically select the available hardware features, the firmware checks the PCB's version
 | 
				
			||||||
 | 
					using vertain pins on the microcontroller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The hardware revision is represented by the enum type :c:enum:`hw_revision`. A call to :c:func:`get_pcb_hardware_version` retrieves the revision.
 | 
				
			||||||
 | 
					When the function is called for the first time, it activates pull-up resistors on pin numbers :c:macro:`HW_REV_DETECT_PIN_LOW` to :c:macro:`HW_REV_DETECT_PIN_HIGH`
 | 
				
			||||||
 | 
					on port :c:macro:`HW_REV_DETECT_GPIO` and reads in the binary number. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The revision is set by externally connecting the pins to ground. The bit pattern read from the port is inverted and then checked internally to derive the hardware version.
 | 
				
			||||||
 | 
					After the version is read for the first time, it is stored internally and subsequent calls to :c:func:`get_pcb_hardware_version` only retrieve the internally stored value to reduce the overhead of the function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Hardware Version Dependent Features
 | 
				
			||||||
 | 
					-----------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- The settings module searches for an external EEPROM on the SPI interface to store some settings, like the calibration. This is enabled for all versions higher or equal to ``v1.3``.
 | 
				
			||||||
 | 
					- The safety controller enables the acknowledging of the external watchdog for all versions higher or equal to ``v1.3``.
 | 
				
			||||||
 | 
					- The oven driver has a separate safety enable for the solid state relay which it enables on all versions higher or equal to ``v1.3``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					API Documentation
 | 
				
			||||||
 | 
					-----------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. doxygengroup:: hw-version-detect
 | 
				
			||||||
 | 
					   :project: Reflow Controller Firmware
 | 
				
			||||||
@@ -14,4 +14,5 @@ mechanisms and the behavior. For a detailed code documentation see the doxygen o
 | 
				
			|||||||
	pid-controller
 | 
						pid-controller
 | 
				
			||||||
	safety/index
 | 
						safety/index
 | 
				
			||||||
	code/index
 | 
						code/index
 | 
				
			||||||
 | 
						hw-version-detect
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,4 +21,5 @@ which are used to retain boot information across resets, for example to communic
 | 
				
			|||||||
	flags
 | 
						flags
 | 
				
			||||||
	backup-ram
 | 
						backup-ram
 | 
				
			||||||
	error-handling
 | 
						error-handling
 | 
				
			||||||
 | 
						startup-tests
 | 
				
			||||||
	stack-checking
 | 
						stack-checking
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								doc/source/firmware/safety/startup-tests.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								doc/source/firmware/safety/startup-tests.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					.. _safety_startup_tests:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Startup Tests
 | 
				
			||||||
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following tests will be performed after each reset / power cycle of the controller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Internal Memory Test
 | 
				
			||||||
 | 
					--------------------
 | 
				
			||||||
 | 
					Directly after startup and after setting up the system clocks, the controller performs memory checks on the internal SRAM and the core coupled memory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RAM checking is performed by testing the following sequences:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Alternating 0x55AA55AA / 0xAA55AA55 pattern
 | 
				
			||||||
 | 
					- Alternating 0xAA55AA55 / 0x55AA55AA pattern
 | 
				
			||||||
 | 
					- 0xFFFFFFFF constant value
 | 
				
			||||||
 | 
					- 0x00000000 constant value
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following functions implement the RAM checking:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. doxygenfunction:: startup_test_perform_ccm_ram_check
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. doxygenfunction:: startup_test_perform_system_ram_check
 | 
				
			||||||
@@ -1,12 +1,32 @@
 | 
				
			|||||||
 | 
					/* Reflow Oven Controller
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* Copyright (C) 2021  Mario Hüttel <mario.huettel@gmx.net>
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* This file is part of the Reflow Oven Controller Project.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* The reflow oven controller is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					* it under the terms of the GNU General Public License version 2 as
 | 
				
			||||||
 | 
					* published by the Free Software Foundation.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* The Reflow Oven Control Firmware is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					* but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					* GNU General Public License for more details.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					* along with the reflow oven controller project.
 | 
				
			||||||
 | 
					* If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @addtogroup hw-version-detect
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <reflow-controller/hw-version-detect.h>
 | 
					#include <reflow-controller/hw-version-detect.h>
 | 
				
			||||||
#include <stm-periph/rcc-manager.h>
 | 
					#include <stm-periph/rcc-manager.h>
 | 
				
			||||||
#include <stm32/stm32f4xx.h>
 | 
					#include <stm32/stm32f4xx.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define HW_REV_DETECT_GPIO GPIOE
 | 
					 | 
				
			||||||
#define HW_REV_DETECT_RCC_FIELD RCC_AHB1ENR_GPIOEEN
 | 
					 | 
				
			||||||
#define HW_REV_DETECT_PIN_LOW (8U)
 | 
					 | 
				
			||||||
#define HW_REV_DETECT_PIN_HIGH (15U)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
enum hw_revision get_pcb_hardware_version(void)
 | 
					enum hw_revision get_pcb_hardware_version(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	uint8_t current_pin;
 | 
						uint8_t current_pin;
 | 
				
			||||||
@@ -46,3 +66,5 @@ enum hw_revision get_pcb_hardware_version(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return revision;
 | 
						return revision;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @} */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,54 @@
 | 
				
			|||||||
 | 
					/* Reflow Oven Controller
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* Copyright (C) 2021  Mario Hüttel <mario.huettel@gmx.net>
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* This file is part of the Reflow Oven Controller Project.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* The reflow oven controller is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					* it under the terms of the GNU General Public License version 2 as
 | 
				
			||||||
 | 
					* published by the Free Software Foundation.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* The Reflow Oven Control Firmware is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					* but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 | 
				
			||||||
 | 
					* GNU General Public License for more details.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					* along with the reflow oven controller project.
 | 
				
			||||||
 | 
					* If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @addtogroup hw-version-detect
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef _HW_VERSION_DETECT_H_
 | 
					#ifndef _HW_VERSION_DETECT_H_
 | 
				
			||||||
#define _HW_VERSION_DETECT_H_
 | 
					#define _HW_VERSION_DETECT_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief GPIO Port used for hardware version detection
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define HW_REV_DETECT_GPIO GPIOE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief RCC Clock register mask used to enable @ref HW_REV_DETECT_GPIO GPIO Port
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define HW_REV_DETECT_RCC_FIELD RCC_AHB1ENR_GPIOEEN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Lowest pin on @ref HW_REV_DETECT_GPIO GPIO Port that shall be used to read in the hardware version
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define HW_REV_DETECT_PIN_LOW (8U)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @brief Highest pin on @ref HW_REV_DETECT_GPIO GPIO Port that shall be used to read in the hardware version
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define HW_REV_DETECT_PIN_HIGH (15U)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief PCB/Hardware Revision Type
 | 
					 * @brief PCB/Hardware Revision Type
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -32,3 +78,5 @@ enum hw_revision {
 | 
				
			|||||||
enum hw_revision get_pcb_hardware_version(void);
 | 
					enum hw_revision get_pcb_hardware_version(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* _HW_VERSION_DETECT_H_ */
 | 
					#endif /* _HW_VERSION_DETECT_H_ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** @} */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,6 @@
 | 
				
			|||||||
* If not, see <http://www.gnu.org/licenses/>.
 | 
					* If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __SETTINGS_SETTINGS_H__
 | 
					#ifndef __SETTINGS_SETTINGS_H__
 | 
				
			||||||
#define __SETTINGS_SETTINGS_H__
 | 
					#define __SETTINGS_SETTINGS_H__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,6 @@
 | 
				
			|||||||
void HardFault_Handler(void)
 | 
					void HardFault_Handler(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* This is a non recoverable fault. Stop the oven */
 | 
						/* This is a non recoverable fault. Stop the oven */
 | 
				
			||||||
 | 
					 | 
				
			||||||
	oven_driver_set_power(0);
 | 
						oven_driver_set_power(0);
 | 
				
			||||||
	oven_driver_apply_power_level();
 | 
						oven_driver_apply_power_level();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user