Browse Source

oneWire eeprom memory for config

Juraj Ďuďák 2 years ago
parent
commit
f541f3c916
11 changed files with 112 additions and 41 deletions
  1. 17 3
      .cproject
  2. 3 0
      .gitmodules
  3. 1 1
      Core/Inc/app_dummy.h
  4. 2 0
      Core/Inc/main.h
  5. 13 13
      Core/Src/app_dummy.c
  6. 15 0
      Core/Src/main.c
  7. 1 1
      Modules/nbus
  8. 1 0
      Modules/one-wire-memory
  9. 13 8
      baModule-slave.ioc
  10. 35 2
      test/app.py
  11. 11 13
      test/comm.py

+ 17 - 3
.cproject

@@ -33,6 +33,7 @@
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.385418854" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/dataframe/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/nbus/Inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/one-wire-memory/Inc}&quot;"/>
 								</option>
 								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1186486764" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
 							</tool>
@@ -52,6 +53,7 @@
 									<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/dataframe/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/nbus/Inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/one-wire-memory/Inc}&quot;"/>
 								</option>
 								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1080858801" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
 							</tool>
@@ -71,6 +73,7 @@
 									<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/dataframe/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/nbus/Inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/one-wire-memory/Inc}&quot;"/>
 								</option>
 								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.475388796" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp"/>
 							</tool>
@@ -93,10 +96,11 @@
 						</toolChain>
 					</folderInfo>
 					<sourceEntries>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="Modules/dataframe/src"/>
-						<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="Modules/nbus/Src"/>
 						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
 						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="Modules/dataframe/src"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="Modules/nbus/Src"/>
+						<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="Modules/one-wire-memory/Src"/>
 					</sourceEntries>
 				</configuration>
 			</storageModule>
@@ -131,6 +135,7 @@
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.27269351" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/dataframe/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/nbus/Inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/one-wire-memory/Inc}&quot;"/>
 								</option>
 								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.87476705" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
 							</tool>
@@ -149,6 +154,7 @@
 									<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/dataframe/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/nbus/Inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/one-wire-memory/Inc}&quot;"/>
 								</option>
 								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1278455630" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
 							</tool>
@@ -167,6 +173,7 @@
 									<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/dataframe/src}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/nbus/Inc}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/baModule-slave/Modules/one-wire-memory/Inc}&quot;"/>
 								</option>
 								<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.1380542932" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp"/>
 							</tool>
@@ -218,5 +225,12 @@
 			<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
 	</storageModule>
-	<storageModule moduleId="refreshScope"/>
+	<storageModule moduleId="refreshScope" versionNumber="2">
+		<configuration configurationName="Debug">
+			<resource resourceType="PROJECT" workspacePath="/baModule-slave"/>
+		</configuration>
+		<configuration configurationName="Release">
+			<resource resourceType="PROJECT" workspacePath="/baModule-slave"/>
+		</configuration>
+	</storageModule>
 </cproject>

+ 3 - 0
.gitmodules

@@ -4,3 +4,6 @@
 [submodule "Modules/nbus"]
 	path = Modules/nbus
 	url = git@gitlab.nsoric.com:sensorical/fw/nbus.git
+[submodule "Modules/one-wire-memory"]
+	path = Modules/one-wire-memory
+	url = git@gitlab.nsoric.com:mtf/stm32/librararies/one-wire-memory.git

+ 1 - 1
Core/Inc/app_dummy.h

@@ -16,7 +16,7 @@ void dummy_init(void *hw_interface, void *hw_config);
 void dummy_reset();
 nBus_sensorType_t dummy_getType(uint8_t sensor_index);
 uint8_t dummy_getSensorCount();
-uint8_t dummy_getData(uint8_t *data);
+uint8_t dummy_getData(uint8_t sensor_index, uint8_t *data);
 uint8_t dummy_setData(uint8_t *data);
 uint8_t dummy_getParam(uint8_t sensor_index, nBus_param_t param);
 uint8_t dummy_hasParam(uint8_t sensor_index, nBus_param_t param);

+ 2 - 0
Core/Inc/main.h

@@ -61,6 +61,8 @@ void Error_Handler(void);
 #define VCP_TX_GPIO_Port GPIOA
 #define VCP_RX_Pin GPIO_PIN_10
 #define VCP_RX_GPIO_Port GPIOA
+#define ONE_WIRE_Pin GPIO_PIN_12
+#define ONE_WIRE_GPIO_Port GPIOA
 #define TMS_Pin GPIO_PIN_13
 #define TMS_GPIO_Port GPIOA
 #define TCK_Pin GPIO_PIN_14

+ 13 - 13
Core/Src/app_dummy.c

@@ -29,19 +29,19 @@ void dummy_reset(){
 
 nBus_sensorType_t dummy_getType(uint8_t sensor_index){
 
-	if (sensor_index >= dummy_getSensorCount())
+	if (sensor_index > dummy_getSensorCount())
 		return TYPE_UNKNOWN;
 
 	switch (sensor_index){
-	case 0:
-		return TYPE_ACCELEROMETER;
 	case 1:
-		return TYPE_GYROSCOPE;
+		return TYPE_ACCELEROMETER;
 	case 2:
-		return TYPE_MAGNETOMETER;
+		return TYPE_GYROSCOPE;
 	case 3:
-		return TYPE_HEART_RATE;
+		return TYPE_MAGNETOMETER;
 	case 4:
+		return TYPE_HEART_RATE;
+	case 5:
 		return TYPE_PRESSURE;
 	}
 	return TYPE_UNKNOWN;
@@ -52,14 +52,14 @@ uint8_t dummy_getSensorCount(){
 	return 4;
 }
 
+uint32_t dummy_data[4]={0x12345678, 0x9ABCDEF0, 0x87654321, 0x0FEDCBA9};
 
-uint8_t dummy_getData(uint8_t *data){
-	data[0]=1;
-	data[1]=2;
-	data[2]=3;
-	data[3]=4;
-	data[4]=5;
-	return 5;
+uint8_t dummy_getData(uint8_t sensor_index, uint8_t *data){
+    for (uint8_t i=0; i<4 ;++i){
+            data[i] = ((uint8_t*)&dummy_data)[i+(sensor_index-1)*8];
+            data[4+i] = ((uint8_t*)&dummy_data)[4+i+(sensor_index-1)*8];
+    }
+	return 8;
 }
 
 uint8_t dummy_setData(uint8_t *data){

+ 15 - 0
Core/Src/main.c

@@ -23,6 +23,9 @@
 /* USER CODE BEGIN Includes */
 #include "nbus_app.h"
 #include "app_dummy.h"
+#include "one_wire.h"
+#include "one_wire.h"
+#include "memory_ec20.h"
 /* USER CODE END Includes */
 
 /* Private typedef -----------------------------------------------------------*/
@@ -117,6 +120,8 @@ int main(void)
   periph.led = &Led;
   periph.rtc = &hrtc;
 
+  Ec20_MemoryDriver *memory = getEc20MemoryDriver();
+  memory->init(ONE_WIRE_GPIO_Port, ONE_WIRE_Pin);
 
   nBusAppInterface_t *dummy = getDummyDriver();
   nbus_init(&periph, dummy);
@@ -409,9 +414,19 @@ static void MX_GPIO_Init(void)
   __HAL_RCC_GPIOA_CLK_ENABLE();
   __HAL_RCC_GPIOB_CLK_ENABLE();
 
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(ONE_WIRE_GPIO_Port, ONE_WIRE_Pin, GPIO_PIN_RESET);
+
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
 
+  /*Configure GPIO pin : ONE_WIRE_Pin */
+  GPIO_InitStruct.Pin = ONE_WIRE_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(ONE_WIRE_GPIO_Port, &GPIO_InitStruct);
+
   /*Configure GPIO pin : LD3_Pin */
   GPIO_InitStruct.Pin = LD3_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

+ 1 - 1
Modules/nbus

@@ -1 +1 @@
-Subproject commit 63a402e8b792ceade180b5c57ed5e9c9db5e4991
+Subproject commit b13977df57be5ab7ee9d7690b3a810df5d9eb94c

+ 1 - 0
Modules/one-wire-memory

@@ -0,0 +1 @@
+Subproject commit bcf9b4fc07df3800ed43aee717bffb73334834ce

+ 13 - 8
baModule-slave.ioc

@@ -30,16 +30,17 @@ Mcu.Name=STM32L031K(4-6)Tx
 Mcu.Package=LQFP32
 Mcu.Pin0=PC14-OSC32_IN
 Mcu.Pin1=PC15-OSC32_OUT
-Mcu.Pin10=VP_TIM22_VS_ClockSourceINT
+Mcu.Pin10=VP_TIM21_VS_ClockSourceINT
+Mcu.Pin11=VP_TIM22_VS_ClockSourceINT
 Mcu.Pin2=PA9
 Mcu.Pin3=PA10
-Mcu.Pin4=PA13
-Mcu.Pin5=PA14
-Mcu.Pin6=PB3
-Mcu.Pin7=VP_RTC_VS_RTC_Activate
-Mcu.Pin8=VP_RTC_VS_RTC_Calendar
-Mcu.Pin9=VP_TIM21_VS_ClockSourceINT
-Mcu.PinsNb=11
+Mcu.Pin4=PA12
+Mcu.Pin5=PA13
+Mcu.Pin6=PA14
+Mcu.Pin7=PB3
+Mcu.Pin8=VP_RTC_VS_RTC_Activate
+Mcu.Pin9=VP_RTC_VS_RTC_Calendar
+Mcu.PinsNb=12
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
 Mcu.UserName=STM32L031K6Tx
@@ -60,6 +61,10 @@ PA10.GPIO_Label=VCP_RX
 PA10.Locked=true
 PA10.Mode=Asynchronous
 PA10.Signal=USART2_RX
+PA12.GPIOParameters=GPIO_Label
+PA12.GPIO_Label=ONE_WIRE
+PA12.Locked=true
+PA12.Signal=GPIO_Output
 PA13.GPIOParameters=GPIO_Label
 PA13.GPIO_Label=TMS
 PA13.Locked=true

+ 35 - 2
test/app.py

@@ -29,13 +29,46 @@ class AppTest:
     def cmd_get_param(self, param):        
         resp = self.serial_port.request(self.module, self.sensor, (CMD_PARAM),[])     
 
+    def cmd_sensor_cnt(self):
+        resp = self.serial_port.request(self.module, 0, CMD_SENSOR_CNT,[])
+        return resp[3]
+
+    def cmd_sensor_type(self, index):
+        resp = self.serial_port.request(self.module, index, CMD_SENSOR_TYPE,[])
+        return resp[3]
+
+    def cmd_sensors_type(self, pocet):
+        resp = self.serial_port.request(self.module, 0, CMD_SENSOR_TYPE,[])
+        typy = [];
+        for i in range(pocet):
+            typy.append([resp[3+2*i],resp[4+2*i]])
+        return typy
+
+    def cmd_sensor_get_params(self, index):
+        resp = self.serial_port.request(self.module, index, CMD_PARAM,[])
+        return resp
+
+    def cmd_sensor_get_data(self, index):
+        resp = self.serial_port.request(self.module, index, CMD_DATA,[])
+        return resp
+
 if __name__ == "__main__":
     
     app = AppTest(0x05, 0x0)
     # app.cmd_version()
     # app.cmd_version()
     # app.cmd_echo()
-    app.cmd_set_param(5)
-    app.cmd_get_param(5)
+    
+    
+    pocet = app.cmd_sensor_cnt()
+    print("Sensor type")
+    for i in range(pocet):
+        print(app.cmd_sensor_type(i+1))
+    print("Sensors type")
+    print(app.cmd_sensors_type(pocet))
+    par = app.cmd_sensor_get_params(1)
+    print(par)
+    app.cmd_sensor_get_data(1)
+    app.cmd_sensor_get_data(2)
     app.finish()
 

+ 11 - 13
test/comm.py

@@ -12,20 +12,18 @@ MODULE_ADDR = 0x05
 
 CMD_VERSION = 0x00
 CMD_ECHO = 0x01
+CMD_STOP = 0x02
+CMD_START = 0x03
 CMD_PARAM = 0x04
-
-CMD_STOP = 0x08
-CMD_START = 0x0C
-CMD_SAMPLERATE = 0x10
-CMD_LOWPASSFIL = 0x14
-CMD_RANGE = 0x18
-CMD_SENSOR_CNT = 0x1C
-CMD_SLEEP = 0x20
-CMD_WAKEUP = 0x24
-CMD_CALIBRATE = 0x28
-CMD_RESET = 0x2C
-CMD_STORE = 0x30
-CMD_DATA = 0x34
+CMD_SENSOR_CNT = 0x05
+CMD_SLEEP = 0x06
+CMD_WAKEUP = 0x07
+CMD_CALIBRATE = 0x08
+CMD_RESET = 0x09
+CMD_STORE = 0x0A
+CMD_DATA = 0x0B
+CMD_SYNC = 0x0C
+CMD_SENSOR_TYPE = 0x0D
 
 crc8x_table = [
         0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,