Prechádzať zdrojové kódy

remove CMD_VERSION, add CMD_INFO

Juraj Ďuďák 2 rokov pred
rodič
commit
93290cf127
3 zmenil súbory, kde vykonal 80 pridanie a 97 odobranie
  1. 15 2
      Inc/nbus_cmd.h
  2. 21 85
      Inc/nbus_config.h.default
  3. 44 10
      Src/nbus_impl.c

+ 15 - 2
Inc/nbus_cmd.h

@@ -16,7 +16,6 @@
 #define NBUS_CMD_H
 
 
-#define CMD_VERSION		0x00
 #define CMD_ECHO 		0x01
 #define CMD_STOP		0x02
 #define CMD_START		0x03
@@ -29,7 +28,21 @@
 #define CMD_STORE		0x0A
 #define CMD_DATA		0x0B
 #define CMD_SYNC		0x0C
-#define SENSOR_TYPE		0x0D
+#define CMD_SENSOR_TYPE	0x0D
+#define CMD_INFO		0x0E
+
+// Command  parameters
+#define INFO_MODULE_NAME		0xE1
+#define INFO_MODULE_TYPE		0xE2
+#define INFO_MODULE_UUID		0xE3
+#define INFO_MODULE_HW			0xE4
+#define INFO_MODULE_FW			0xE5	// ?
+
+#define PARAM_SENSOR_SAMPLERATE	0x41
+#define PARAM_SENSOR_LPF		0x42
+#define PARAM_SENSOR_FULL_SCALE	0x43
+#define PARAM_SENSOR_GAIN		0x44
+
 
 #define OK_CODE 				(0x00)
 #define ILLEGAL_FUNCTION 		(0x01)

+ 21 - 85
Inc/nbus_config.h.default

@@ -1,70 +1,36 @@
 /**
- * @file  ubus_config.h
+ * @file  nbus_config.h
  *
- * @brief Konfigurácia protokolu uBUS
+ * @brief Konfigurácia protokolu nBUS
  * @author Juraj Dudak
- * @date 20.12.2022
+ * @date 29.10.2023
  */
 
-/** @addtogroup Firmware
-  * @{
-  */
+#ifndef __NBUS_CONFIG_H__
+#define __NBUS_CONFIG_H__
 
-/** @addtogroup Implementácia_uBUS
-  *
-  * @{
-  */
+#define MODULE_ADDRESS	5
+#define MODULE_MASTER	1
+#define MODULE_SLAVE	1
 
-/** @addtogroup Konfigurácia
-  * @brief Konfigurácia komunikačného zásobníka uBUS, súbor ubus_config.h
-  *
-  * @{
-  *
-  * ## Základné nastavenia
-  *
-  * Základné naastavenie konfigurácie je potrebné urobiť pri konfiguráciu použitého MCU. Pri konfigurácii MCU je potrebné nastaviť:
-  *
-  * - želanú frekvenciu jadra.
-  * - aktivovať komunikažné rozhranie USART
-  *   - povoliť prerušenie na USART
-  *   - v prípade aktivácie nastavenia USE_USART_DMA_TX, pridať DMA kanál pre smer TX
-  * - aktivovať základný časovať TIM (TIM6 alebo TIM7)
-  *   - povoliť prerušenie na použitom časovači.
-  * - GPIO pin procesora, ktorý bude použitý pre svetelnú signalizáciu
-  */
+// MUST BE 2 BYTE LONG
+#define VERSION_FW "01"		//MAJOR MINOR
+// MUST BE 2 BYTE LONG
+#define VERSION_HW "01"		//MAJOR MINOR
 
-#ifndef __UBUS_CONFIG_H__
-#define __UBUS_CONFIG_H__
+// MUST BE 8 BYTE LONG
+#define MODULE_NAME "prototyp"
+// MUST BE 3 BYTE LONG
+#define MODULE_TYPE "DUM"
 
-/** @brief Základná komunikačná rýchlosť modulu. */
-#define UART_BAUDRATE 19200
 
-/** @brief Parita pre komunikačné rozhanie.
- *
- * Povolené hodnoty:  UART_PARITY_EVEN, UART_PARITY_ODD, UART_PARITY_NONE. Default: UART_PARITY_EVEN
- */
-#define UBUS_UART_PARITY UART_PARITY_EVEN
 
-/**
-* @brief Rodina dosky, resp. typové označenie meracieho modulu.
-*
-* Maximálna povolená dĺžka sú 4 znaky.
-*/
-#define FW_FAMILY "TEST"
+#define CRC8_INIT_VALUE	0x0
 
-/**
-* @brief Globalne povoluje resp zakazuje použitie možnosti šifrovania komunikácie.
-*
-* Vypnutie RSA šifrovania ušetrí cca 2kB.
-*/
-#define ENABLE_RSA 1
+/** @brief Základná komunikačná rýchlosť modulu. */
+#define UART_BAUDRATE 921600
 
-/**
-* @brief Globalne povoluje resp zakazuje vypoctu pomocou tabulky CRC.
-*
-* Vypnutím direktívy sa zmnčí pamäťová náročnosť FLASH (asi o 600 B) ale spomalí sa výpočet CRC prijímaného a odosielaného paketu.
-*/
-#define USE_FAST_CRC 1
+#define UART_TIMER_PRESCALER  7		//32MHz/8 => Mhz  t=0.25us (1)
 
 /**
 * @brief Určuje, či sa použije hardvérové riadenie zbernice RS485.
@@ -77,7 +43,7 @@
 * 0 - blokujuci spôsob, 1- neblokujúci spôsob pomocou DMA. Využitie neblokujúcej komunikácie má význam
 * len pri BULK dátovom prenose, kedy ako odpoveď na požiadavku o prebos väčšieho množstva dát (4kB) sa odošle viecero rámcov za sebou.
 */
-#define USE_USART_DMA_TX 0
+#define USE_USART_DMA_TX 1
 
 /**
 * @brief UART Timeout - pri jeho vypsani sa doska restartuje.
@@ -87,35 +53,5 @@
 */
 #define UART_WATCHDOG 30 * 60 * 1000 + 35000
 
-/**
-* @brief Podpora pre formát Qm.n pre namerané dáta.
-*
-* Touto direktívou sa zapne práca s typom float.
-*/
-#define QFORMAT_SUPPORT_ENABLE 1
-
-/**
- * @brief Umožní monitorovanie prevádzkovýách napätí meracieho modulu.
- *
- * Ak je monitorovaine aktivované, vyžaduje sa aby v konfigurácii modulu uBUS bolo aktivované rozhranie ADC.
- */
-#define SELF_MONITORING 0
-
-/** @brief Aktivuje sub-slave 14 (0xE) - driver 1-wire. Implementácia je v súbore ubus_dev_E.c */
-//#define UBUS_CHANNEL_E
-/** @brief Aktivuje sub-slave 15 - pamäť konfigurácie (0xF). Implementácia je v súbore ubus_dev_F.c */
-#define UBUS_CHANNEL_F
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
 
 #endif

+ 44 - 10
Src/nbus_impl.c

@@ -11,7 +11,7 @@ inline static void setErrorResponse(nBus_TypeDef *nbus, uint8_t code){
 
 void nbus_unicastToSensorGet(nBus_TypeDef *nbus){
 	switch(nbus->function_code.function){
-	case SENSOR_TYPE:
+	case CMD_SENSOR_TYPE:
 	{
 		nBus_sensorType_t t = nbus->interface->getType(nbus->sensorInfo.address);
 		if (t == TYPE_UNKNOWN) {
@@ -92,14 +92,6 @@ void nbus_unicastToSensorSet(nBus_TypeDef *nbus){
 
 void nbus_unicastToModuleGet(nBus_TypeDef *nbus){
 	switch(nbus->function_code.function){
-	case CMD_VERSION:
-	{
-		nbus->tx_buffer[4] = VERSION_MAJOR;
-		nbus->tx_buffer[5] = '.';
-		nbus->tx_buffer[6] = VERSION_MINOR;
-		nbus->tx_length += 3;
-	}
-	break;
 
 	case CMD_ECHO:
 	{
@@ -118,7 +110,7 @@ void nbus_unicastToModuleGet(nBus_TypeDef *nbus){
 	}
 	break;
 
-	case SENSOR_TYPE:
+	case CMD_SENSOR_TYPE:
 	{
 		//response: sensor1_index:sensor2_type | sensor1_index:sensor2_type | ...
 		for(uint8_t i = 0; i < nbus->interface->getSensorCount() ; i++){
@@ -129,6 +121,48 @@ void nbus_unicastToModuleGet(nBus_TypeDef *nbus){
 	}
 	break;
 
+	case CMD_INFO:
+	{
+		switch(nbus->rx_buffer[3]){
+		case INFO_MODULE_NAME:
+			nbus->tx_buffer[4] = MODULE_NAME[0];
+			nbus->tx_buffer[5] = MODULE_NAME[1];
+			nbus->tx_buffer[6] = MODULE_NAME[2];
+			nbus->tx_buffer[7] = MODULE_NAME[3];
+			nbus->tx_buffer[8] = MODULE_NAME[4];
+			nbus->tx_buffer[9] = MODULE_NAME[5];
+			nbus->tx_buffer[10] = MODULE_NAME[6];
+			nbus->tx_buffer[11] = MODULE_NAME[7];
+			nbus->tx_length += 8;
+			break;
+		case INFO_MODULE_TYPE:
+			nbus->tx_buffer[4] = MODULE_TYPE[0];
+			nbus->tx_buffer[5] = MODULE_TYPE[1];
+			nbus->tx_buffer[6] = MODULE_TYPE[2];
+			nbus->tx_length += 3;
+			break;
+		case INFO_MODULE_UUID:
+			// Reference manual: Unique device ID registers
+			uint32_t (*unique_id_3) = (uint32_t*)(0x1FF80064); // BASE address + 0x14 0ffset
+			*(nbus->tx_buffer) = (uint32_t)unique_id_3;
+			nbus->tx_length += 4;
+			break;
+		case INFO_MODULE_FW:
+			nbus->tx_buffer[4] = VERSION_FW[0];
+			nbus->tx_buffer[5] = '.';
+			nbus->tx_buffer[6] = VERSION_FW[1];
+			nbus->tx_length += 3;
+			break;
+		case INFO_MODULE_HW:
+			nbus->tx_buffer[4] = VERSION_HW[0];
+			nbus->tx_buffer[5] = '.';
+			nbus->tx_buffer[6] = VERSION_HW[1];
+			nbus->tx_length += 3;
+			break;
+		}
+	}
+	break;
+
 	default:
 	{
 		setErrorResponse(nbus, ILLEGAL_FUNCTION);