Browse Source

I2C sensor ok.

zhangbo 5 years ago
parent
commit
cbbd9b9d10

+ 2 - 2
app/Makefile

@@ -4,8 +4,8 @@ all	:
 	make -C ./driver/GPIO
 	make -C ./driver/FMC
 	make -C ./driver/ADC
-	#make -C ./driver/I2C 
-	
+	make -C ./driver/I2C 
+
 	# make apps
 	make -C ./bmc
 	make -C ./goahead-5.1.0

+ 7 - 1
app/bmc/Makefile

@@ -55,11 +55,17 @@ SRC += ./msghndlr/Storage/FRUDevice/FRU.c
 SRC += ./msghndlr/Storage/SDRDevice/SDR.c
 SRC += ./msghndlr/Storage/SELDevice/SEL.c
 
+# hal_api
+SRC += $(wildcard ../hal_api/*.c) 
 
 #incldue
 CFLAGS	+= -I$(INSTALL_ROOT)/A2F/root/usr/include
 CFLAGS	+= -I ../common_include
-CFLAGS	+= -I ../stm32_api
+CFLAGS	+= -I ../hal_api
+CFLAGS	+= -I ../driver
+CFLAGS	+= -I ../driver/STM32F4xx_HAL_Driver
+CFLAGS	+= -I ../driver/STM32F4xx_HAL_Driver/Inc 
+
 CFLAGS	+= -I ./
 CFLAGS	+= -I ./uds
 CFLAGS	+= -I ./lan

BIN
app/bmc/bmc_app


BIN
app/bmc/bmc_app.gdb


+ 1 - 1
app/bmc/main.h

@@ -17,7 +17,7 @@
 /* Declare global variable */
 
 
-#define SENSOR_NUMBERS				(3)
+#define SENSOR_NUMBERS				(4)
 #define FW_VERSION_MAJOR			(1)
 #define FW_VERSION_MINOR			(0)
 #define PRIMARY_IPMB_SUPPORT		1

+ 0 - 1
app/bmc/msghndlr/MsgHndlrTask.c

@@ -124,7 +124,6 @@ void *MsgHndlrTask( void *pArg )
 static void
 ProcessIPMIReq (MsgPkt_T* pReq, MsgPkt_T* pRes)
 {
-	printf("ProcessesIPMIReq\n");
 	CmdHndlrMap_T *    	pCmdHndlrMap;
 	uint32_t            HdrOffset = 0;
 	uint8_t				CmdOverride = 1;

+ 1 - 1
app/bmc/msghndlr/SensorEvent/SensorDevice/SensorMonitor.c

@@ -94,7 +94,7 @@ void *SensorMonitorTask (void *pArg)
 			{
 				pSensorInfo = (SensorInfo_T *)&pSMSharedMem->SensorInfo [i];
 
-				printf("sensor number: %d, RecordID: %d\n", pSensorInfo->SensorNumber, pSensorInfo->RecordID);
+				//printf("sensor number: %d, RecordID: %d\n", pSensorInfo->SensorNumber, pSensorInfo->RecordID);
 				/* Monitoring cycle */
 				if (THRESHOLD_SENSOR_CLASS  == pSensorInfo->EventTypeCode)
 				{

+ 7 - 0
app/bmc/readme.txt

@@ -0,0 +1,7 @@
+
+
+1. Add sensors
+	- sensor_driveer.c		Add new driver
+	- sensor_sdr.c			Add new SDR
+	- main.h				SENSOR_NUMBERS = ?
+

+ 65 - 24
app/bmc/sensor_driver.c

@@ -7,11 +7,12 @@
 #include <stdint.h>
 #include <stdio.h>
 #include "sensor_tbl.h"
+#include "hal_interface_api.h"
 
 /* 
  * sensor number: 1
- * sensor name: LM73
- * brief: temporary 
+ * sensor name: +12V
+ * brief: ltc4280
  */
 int sensor_1_init(void)
 {
@@ -27,24 +28,18 @@ int sensor_1_write(void)
 
 int sensor_1_read(uint8_t *reading)
 {
-	// uint8_t tmp[2] = {1,2};
-	// //I2C_MasterRead(I2C1, 0x90, tmp, 1);
-	// if(I2C_MasterRead(I2C1, 0x90, tmp, 2) != 0)
-	// {
-	// 	//log("read sensor 1 error!");
-	// 	*reading = 0;
-	// 	return 0;
-	// }
-	// *reading = tmp[0];
-	
-	printf("read sensor 1!\n");
+	uint8_t buf = 5;
+	stm32_i2c_master_write(3, 0xAA, &buf, 1);
+	stm32_i2c_master_read(3, 0xAA, &buf, 1);
+	printf("read sensor 1: %#x!\n", buf);
+	*reading = buf;
 	return 0;
 }
 
 /* 
  * sensor number: 2
- * sensor name: LM73
- * brief: temporary 
+ * sensor name: +12V_Current
+ * brief:  ltc4280
  */
 int sensor_2_init(void)
 {
@@ -60,15 +55,18 @@ int sensor_2_write(void)
 
 int sensor_2_read(uint8_t *reading)
 {
-	printf("read sensor 2!\n");
-	*reading = 0xaa;
+	uint8_t buf = 4;
+	stm32_i2c_master_write(3, 0xAA, &buf, 1);
+	stm32_i2c_master_read(3, 0xAA, &buf, 1);
+	printf("read sensor 2: %#x!\n", buf);
+	*reading = buf;
 	return 0;
 }
 
 /* 
- * sensor number: 2
- * sensor name: LM73
- * brief: temporary 
+ * sensor number: 3
+ * sensor name: Temp_Board
+ * brief: G780 local 
  */
 int sensor_3_init(void)
 {
@@ -84,7 +82,39 @@ int sensor_3_write(void)
 
 int sensor_3_read(uint8_t *reading)
 {
-	printf("read sensor 3!\n");
+	uint8_t buf = 0;
+	stm32_i2c_master_write(3, 0x98, &buf, 1);
+	stm32_i2c_master_read(3, 0x98, &buf, 1);
+	printf("read sensor 3: %#x!\n", buf);
+	*reading = buf;
+	return 0;
+}
+
+
+/* 
+ * sensor number: 4
+ * sensor name: Temp_FPGA
+ * brief: G780 remote 
+ */
+int sensor_4_init(void)
+{
+//	log("init sensor 2!\r\n");
+	return 0;	
+}
+
+int sensor_4_write(void)
+{
+//	log("write sensor 2!\r\n");
+	return 0;
+}
+
+int sensor_4_read(uint8_t *reading)
+{
+	uint8_t buf = 1;
+	stm32_i2c_master_write(3, 0x98, &buf, 1);
+	stm32_i2c_master_read(3, 0x98, &buf, 1);
+	printf("read sensor 4: %#x!\n", buf);
+	*reading = buf;
 	return 0;
 }
 
@@ -102,7 +132,7 @@ sensor_tbl_t sensor_tbl[]=
 	},
 	
 	{
-		6,
+		2,		//sensor number
 		0,		//power on delay
 		0,		//reset delay
 		3,		//Monitor interval
@@ -112,8 +142,8 @@ sensor_tbl_t sensor_tbl[]=
 		sensor_2_init,
 	},
 	
-	{	//ADC_IN5
-		7,
+	{	
+		3,		//sensor number
 		0,		//power on delay
 		0,		//reset delay
 		3,		//Monitor interval
@@ -121,6 +151,17 @@ sensor_tbl_t sensor_tbl[]=
 		sensor_3_read,
 		sensor_3_write,
 		sensor_3_init,
+	},
+	
+	{	
+		4,		//sensor number
+		0,		//power on delay
+		0,		//reset delay
+		3,		//Monitor interval
+		MonitorOnStandby,	//monitor states
+		sensor_4_read,
+		sensor_4_write,
+		sensor_4_init,
 	}
 	
 };

+ 280 - 58
app/bmc/sensor_sdr.c

@@ -40,9 +40,9 @@ const MgmtCtrlrDevLocator_T bmc_sdr = {
 	
 const FullSensorRec_T full_sdr_tbl[] = {
 /*
- * sensor number: 0
- * sensor name:	LM73
- * brief:	temporary
+ * sensor number: 1
+ * sensor name:	+12V
+ * brief:	ltc4280
  */
 	{
 		/* SDR Record Header */
@@ -61,46 +61,87 @@ const FullSensorRec_T full_sdr_tbl[] = {
 		0x1,	//Entity Instance	
 		0x7f,	//Entity Initialization
 		0x68,	//Sensor Capabilities
-		0x01,	//Sensor Type
+		0x02,	//Sensor Type: 01-temperature, 02-voltage, 03-current, 04-fan
 		0x01,	//Event / Reading Type
 		0x7a95,	//Lower Threshold Reading Mask
 		0x7a95, //Upper Threshold Reading Mask
 		0x3f3f,	//Settable / Readable Threshold Mask
-		(0x2<<6)+(0x0<<3)+(0x0<<1)+0x0,	//Sensor Units 1
-		0x1,	//Sensor Units 2 - Base Unit
+
+		/*
+			[7:6] - Analog (numeric) Data Format**
+			00b = unsigned
+			01b = 1's complement(singed)
+			10b = 2's complement(singed)
+			11b = Does not return analog (numeric) reading
+			[5:3] - Rate unit
+			000b = none
+			001b = per µS
+			010b = per ms
+			011b = per s
+			100b = per minute
+			101b = per hour
+			110b = per day
+			111b = reserved
+			[2:1] - Modifier unit
+			00b = none
+			01b = Basic Unit / Modifier Unit
+			10b = Basic Unit * Modifier Unit
+			11b = reserved
+			[0] - Percentage 0b = no, 1b = yes
+		*/
+		(0x0<<6)+(0x0<<3)+(0x0<<1)+0x0,	//Sensor Units 1
+		/*
+			0 unspecified 
+			1 degrees C 
+			2 degrees F 
+			3 degrees K 
+			4 Volts 
+			5 Amps
+		*/
+		0x4,	//Sensor Units 2 - Base Unit
 		0x0,	//Sensor Units 3 - Modifier Unit
 		0x0,	//Linerization
-		0x2,	//M
-		((0x2>>2)&0xC0)+(0x0&0x3F),	//M,Tolerance
-		0x0,	//B
+		/* M = 0x12e x 10^-4 */
+		0x3d,	//M_LSB
+		/*
+			[7:6] - M: MS 2 bits
+			[5:0] - Tolerance: 6 bits, unsigned (Tolerance in +/- ½ raw counts)
+		*/
+		((0x0>>2)&0xC0)+(0x0&0x3F),	//M,Tolerance
+		0x0,	//B_LSB
+		/*
+			[7:6] - B: MS 2 bits
+			Unsigned, 10-bit Basic Sensor Accuracy in 1/100 percent scaled up by unsigned
+			Accuracy exponent:
+			[5:0] - Accuracy: LS 6 bits
+		*/
 		((0x0>>2)&0xC0)+(0x0&0x3F),	//B,Accuracy
 		((0x0>>2)&0xF0)+(0x0&0x0C)+0x0,	//Accuracy,Accuracy exponent
-		(0x0<<4)+(0x0&0x0F),		//R exponent,B exponent
+		(0xfd<<4)+(0x0&0x0F),		//R exponent,B exponent
 		0x0,	//Analog Characteristics Flags
 		0x7f,	//Nominal Reading
-		0x7f,	//Normal Maximum
-		0x80,	//Normal Minimum
-		0x7f,	//Sensor Maximum Reading
-		0x80,	//Sensor Minimum Reading
-		0x7f,	//Upper Non-Recoverable Threshold
-		0x7f,	//Upper Critical Threshold
-		0x7f,	//Upper Non-Critical Threshold
-		0x80,	//Lower Non-Recoverable Threshold
-		0x80,	//Lower Critical Threshold
-		0x80,	//Lower Non-Critical threshold
+		0xff,	//Normal Maximum
+		0x00,	//Normal Minimum
+		0xff,	//Sensor Maximum Reading
+		0x00,	//Sensor Minimum Reading
+		0xff,	//Upper Non-Recoverable Threshold
+		0xff,	//Upper Critical Threshold
+		0xff,	//Upper Non-Critical Threshold
+		0x00,	//Lower Non-Recoverable Threshold
+		0x00,	//Lower Critical Threshold
+		0x00,	//Lower Non-Critical threshold
 		0x0,	//Positive - threshold Hysteresis value
 		0x0,	//Negative - threshold Hysteresis value
 		0x0,	//Reserved
 		0x0,	//Reserved
 		0x0,	//OEM
 		0xC0+MAX_ID_STR_LEN,	//ID String Type / Length Code
-		"temp_board"
+		"+12V"
 	},
-
 /*
- * sensor number: 1
- * sensor name:	LM73
- * brief:	temporary
+ * sensor number: 2
+ * sensor name:	+12V_Current
+ * brief:	ltc4280
  */
 	{
 		/* SDR Record Header */
@@ -113,24 +154,165 @@ const FullSensorRec_T full_sdr_tbl[] = {
 		/* Record Key Bytes */
 		0x20,	//Sensor Owner ID
 		0x0,	//Sensor Owner LUN
-		0x06,	//Sensor Number
+		0x02,	//Sensor Number
 		/* Record Body Bytes */
 		0x7,	//Entity ID
-		0x2,	//Entity Instance	
+		0x1,	//Entity Instance	
 		0x7f,	//Entity Initialization
 		0x68,	//Sensor Capabilities
-		0x01,	//Sensor Type
+		0x02,	//Sensor Type: 01-temperature, 02-voltage, 03-current, 04-fan
 		0x01,	//Event / Reading Type
 		0x7a95,	//Lower Threshold Reading Mask
 		0x7a95, //Upper Threshold Reading Mask
 		0x3f3f,	//Settable / Readable Threshold Mask
+
+		/*
+			[7:6] - Analog (numeric) Data Format**
+			00b = unsigned
+			01b = 1's complement(singed)
+			10b = 2's complement(singed)
+			11b = Does not return analog (numeric) reading
+			[5:3] - Rate unit
+			000b = none
+			001b = per µS
+			010b = per ms
+			011b = per s
+			100b = per minute
+			101b = per hour
+			110b = per day
+			111b = reserved
+			[2:1] - Modifier unit
+			00b = none
+			01b = Basic Unit / Modifier Unit
+			10b = Basic Unit * Modifier Unit
+			11b = reserved
+			[0] - Percentage 0b = no, 1b = yes
+		*/
+		(0x0<<6)+(0x0<<3)+(0x0<<1)+0x0,	//Sensor Units 1
+		/*
+			0 unspecified 
+			1 degrees C 
+			2 degrees F 
+			3 degrees K 
+			4 Volts 
+			5 Amps
+		*/
+		0x5,	//Sensor Units 2 - Base Unit
+		0x0,	//Sensor Units 3 - Modifier Unit
+		0x0,	//Linerization
+		/* M = 0x12e x 10^-4 */
+		0x2e,	//M_LSB
+		/*
+			[7:6] - M: MS 2 bits
+			[5:0] - Tolerance: 6 bits, unsigned (Tolerance in +/- ½ raw counts)
+		*/
+		((0x12e>>2)&0xC0)+(0x0&0x3F),	//M,Tolerance
+		0x0,	//B_LSB
+		/*
+			[7:6] - B: MS 2 bits
+			Unsigned, 10-bit Basic Sensor Accuracy in 1/100 percent scaled up by unsigned
+			Accuracy exponent:
+			[5:0] - Accuracy: LS 6 bits
+		*/
+		((0x0>>2)&0xC0)+(0x0&0x3F),	//B,Accuracy
+		((0x0>>2)&0xF0)+(0x0&0x0C)+0x0,	//Accuracy,Accuracy exponent
+		(0xfc<<4)+(0x0&0x0F),		//R exponent,B exponent
+		0x0,	//Analog Characteristics Flags
+		0x7f,	//Nominal Reading
+		0xff,	//Normal Maximum
+		0x00,	//Normal Minimum
+		0xff,	//Sensor Maximum Reading
+		0x00,	//Sensor Minimum Reading
+		0xff,	//Upper Non-Recoverable Threshold
+		0xff,	//Upper Critical Threshold
+		0xff,	//Upper Non-Critical Threshold
+		0x00,	//Lower Non-Recoverable Threshold
+		0x00,	//Lower Critical Threshold
+		0x00,	//Lower Non-Critical threshold
+		0x0,	//Positive - threshold Hysteresis value
+		0x0,	//Negative - threshold Hysteresis value
+		0x0,	//Reserved
+		0x0,	//Reserved
+		0x0,	//OEM
+		0xC0+MAX_ID_STR_LEN,	//ID String Type / Length Code
+		"+12V_Current"
+	},
+	
+/*
+ * sensor number: 3
+ * sensor name:	Temp_Board
+ * brief:	G780 local
+ */
+	{
+		/* SDR Record Header */
+		{
+			0x04,	//Record ID
+			0x51,	//SDR Version
+			FULL_SDR_REC,	//Record Type
+			43+MAX_ID_STR_LEN,	//Record Length = 43+string length
+		},
+		/* Record Key Bytes */
+		0x20,	//Sensor Owner ID
+		0x0,	//Sensor Owner LUN
+		0x03,	//Sensor Number
+		/* Record Body Bytes */
+		0x7,	//Entity ID
+		0x1,	//Entity Instance	
+		0x7f,	//Entity Initialization
+		0x68,	//Sensor Capabilities
+		0x01,	//Sensor Type: 01-temperature, 02-voltage, 03-current, 04-fan
+		0x01,	//Event / Reading Type
+		0x7a95,	//Lower Threshold Reading Mask
+		0x7a95, //Upper Threshold Reading Mask
+		0x3f3f,	//Settable / Readable Threshold Mask
+
+		/*
+			[7:6] - Analog (numeric) Data Format**
+			00b = unsigned
+			01b = 1's complement(singed)
+			10b = 2's complement(singed)
+			11b = Does not return analog (numeric) reading
+			[5:3] - Rate unit
+			000b = none
+			001b = per µS
+			010b = per ms
+			011b = per s
+			100b = per minute
+			101b = per hour
+			110b = per day
+			111b = reserved
+			[2:1] - Modifier unit
+			00b = none
+			01b = Basic Unit / Modifier Unit
+			10b = Basic Unit * Modifier Unit
+			11b = reserved
+			[0] - Percentage 0b = no, 1b = yes
+		*/
 		(0x2<<6)+(0x0<<3)+(0x0<<1)+0x0,	//Sensor Units 1
+		/*
+			0 unspecified 
+			1 degrees C 
+			2 degrees F 
+			3 degrees K 
+			4 Volts 
+			5 Amps
+		*/
 		0x1,	//Sensor Units 2 - Base Unit
 		0x0,	//Sensor Units 3 - Modifier Unit
 		0x0,	//Linerization
-		0x2,	//M
-		((0x2>>2)&0xC0)+(0x0&0x3F),	//M,Tolerance
-		0x0,	//B
+		0x1,	//M_LSB
+		/*
+			[7:6] - M: MS 2 bits
+			[5:0] - Tolerance: 6 bits, unsigned (Tolerance in +/- ½ raw counts)
+		*/
+		((0x0>>2)&0xC0)+(0x0&0x3F),	//M,Tolerance
+		0x0,	//B_LSB
+		/*
+			[7:6] - B: MS 2 bits
+			Unsigned, 10-bit Basic Sensor Accuracy in 1/100 percent scaled up by unsigned
+			Accuracy exponent:
+			[5:0] - Accuracy: LS 6 bits
+		*/
 		((0x0>>2)&0xC0)+(0x0&0x3F),	//B,Accuracy
 		((0x0>>2)&0xF0)+(0x0&0x0C)+0x0,	//Accuracy,Accuracy exponent
 		(0x0<<4)+(0x0&0x0F),		//R exponent,B exponent
@@ -152,19 +334,18 @@ const FullSensorRec_T full_sdr_tbl[] = {
 		0x0,	//Reserved
 		0x0,	//OEM
 		0xC0+MAX_ID_STR_LEN,	//ID String Type / Length Code
-		"top_board"	
+		"Temp_Board"
 	},
-	
 
-/*
- * sensor number: 7
- * sensor name:	ADC0_IN5
- * brief:	voltage
+	/*
+ * sensor number: 4
+ * sensor name:	Temp_FPGA
+ * brief:	G780 remote
  */
 	{
 		/* SDR Record Header */
 		{
-			0x04,	//Record ID
+			0x05,	//Record ID
 			0x51,	//SDR Version
 			FULL_SDR_REC,	//Record Type
 			43+MAX_ID_STR_LEN,	//Record Length = 43+string length
@@ -172,46 +353,87 @@ const FullSensorRec_T full_sdr_tbl[] = {
 		/* Record Key Bytes */
 		0x20,	//Sensor Owner ID
 		0x0,	//Sensor Owner LUN
-		0x07,	//Sensor Number
+		0x04,	//Sensor Number
 		/* Record Body Bytes */
 		0x7,	//Entity ID
-		0x2,	//Entity Instance	
+		0x1,	//Entity Instance	
 		0x7f,	//Entity Initialization
 		0x68,	//Sensor Capabilities
-		0x02,	//Sensor Type,	01:Temperature; 02:Voltage; 03:Current; 04:Fan;
-		0x01,	//Event / Reading Type,  01:Threshold;
+		0x01,	//Sensor Type: 01-temperature, 02-voltage, 03-current, 04-fan
+		0x01,	//Event / Reading Type
 		0x7a95,	//Lower Threshold Reading Mask
 		0x7a95, //Upper Threshold Reading Mask
 		0x3f3f,	//Settable / Readable Threshold Mask
-		(0x0<<6)+(0x0<<3)+(0x0<<1)+0x0,	//Sensor Units 1, (analog(0:unsigned;2:2's complement)<<6)+(rate unit<<3)+(modify unit<<1)+percentage, 
-		0x4,	//Sensor Units 2 - Base Unit; 1:degree C; 4:Voltage; 5:Amps; 18:RPM
+
+		/*
+			[7:6] - Analog (numeric) Data Format**
+			00b = unsigned
+			01b = 1's complement(singed)
+			10b = 2's complement(singed)
+			11b = Does not return analog (numeric) reading
+			[5:3] - Rate unit
+			000b = none
+			001b = per µS
+			010b = per ms
+			011b = per s
+			100b = per minute
+			101b = per hour
+			110b = per day
+			111b = reserved
+			[2:1] - Modifier unit
+			00b = none
+			01b = Basic Unit / Modifier Unit
+			10b = Basic Unit * Modifier Unit
+			11b = reserved
+			[0] - Percentage 0b = no, 1b = yes
+		*/
+		(0x2<<6)+(0x0<<3)+(0x0<<1)+0x0,	//Sensor Units 1
+		/*
+			0 unspecified 
+			1 degrees C 
+			2 degrees F 
+			3 degrees K 
+			4 Volts 
+			5 Amps
+		*/
+		0x1,	//Sensor Units 2 - Base Unit
 		0x0,	//Sensor Units 3 - Modifier Unit
 		0x0,	//Linerization
-		0x81,	//M
+		0x1,	//M_LSB
+		/*
+			[7:6] - M: MS 2 bits
+			[5:0] - Tolerance: 6 bits, unsigned (Tolerance in +/- ½ raw counts)
+		*/
 		((0x0>>2)&0xC0)+(0x0&0x3F),	//M,Tolerance
-		0x0,	//B
+		0x0,	//B_LSB
+		/*
+			[7:6] - B: MS 2 bits
+			Unsigned, 10-bit Basic Sensor Accuracy in 1/100 percent scaled up by unsigned
+			Accuracy exponent:
+			[5:0] - Accuracy: LS 6 bits
+		*/
 		((0x0>>2)&0xC0)+(0x0&0x3F),	//B,Accuracy
 		((0x0>>2)&0xF0)+(0x0&0x0C)+0x0,	//Accuracy,Accuracy exponent
-		(0xc<<4)+(0x0&0x0F),		//R exponent,B exponent
+		(0x0<<4)+(0x0&0x0F),		//R exponent,B exponent
 		0x0,	//Analog Characteristics Flags
 		0x7f,	//Nominal Reading
-		0xff,	//Normal Maximum
-		0x00,	//Normal Minimum
-		0xff,	//Sensor Maximum Reading
-		0x00,	//Sensor Minimum Reading
-		0xff,	//Upper Non-Recoverable Threshold
-		0xff,	//Upper Critical Threshold
-		0xff,	//Upper Non-Critical Threshold
-		0x00,	//Lower Non-Recoverable Threshold
-		0x00,	//Lower Critical Threshold
-		0x00,	//Lower Non-Critical threshold
+		0x7f,	//Normal Maximum
+		0x80,	//Normal Minimum
+		0x7f,	//Sensor Maximum Reading
+		0x80,	//Sensor Minimum Reading
+		0x7f,	//Upper Non-Recoverable Threshold
+		0x7f,	//Upper Critical Threshold
+		0x7f,	//Upper Non-Critical Threshold
+		0x80,	//Lower Non-Recoverable Threshold
+		0x80,	//Lower Critical Threshold
+		0x80,	//Lower Non-Critical threshold
 		0x0,	//Positive - threshold Hysteresis value
 		0x0,	//Negative - threshold Hysteresis value
 		0x0,	//Reserved
 		0x0,	//Reserved
 		0x0,	//OEM
 		0xC0+MAX_ID_STR_LEN,	//ID String Type / Length Code
-		"ADC0_IN5"	
+		"Temp_FPGA"
 	},
 };
 

+ 30 - 0
app/driver/GPIO_I2C/Makefile

@@ -0,0 +1,30 @@
+
+KERNELDIR	:= $(INSTALL_ROOT)/linux
+
+gpio_i2c-objs := ../STM32F4xx_HAL_Driver/system_stm32f4xx.o
+gpio_i2c-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o
+#fmc-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o
+gpio_i2c-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_fmc.o
+gpio_i2c-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o
+gpio_i2c-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_sram.o
+gpio_i2c-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o
+
+gpio_i2c-objs += gpio_i2c_main.o
+obj-m	+= gpio_i2c.o
+
+PWD := $(shell pwd)	
+APPDIR := $(INSTALL_ROOT)/projects/gd32450i-eval/app
+
+EXTRA_CFLAGS := -I$(APPDIR)/driver/STM32F4xx_HAL_Driver
+EXTRA_CFLAGS += -I$(APPDIR)/driver/STM32F4xx_HAL_Driver/Inc
+EXTRA_CFLAGS += -I$(APPDIR)/common_include
+EXTRA_CFLAGS += -I$(APPDIR)/driver
+
+modules	:
+	make -C $(KERNELDIR) M=$(PWD) modules CFLAGS="" LDFLAGS=""
+#	rm -f *.o
+
+clean_modules:
+	make -C $(KERNELDIR) M=`pwd` clean
+	rm -f modules.order
+	rm -f *.o

+ 163 - 0
app/driver/GPIO_I2C/gpio_i2c_main.c

@@ -0,0 +1,163 @@
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/cdev.h>
+#include <linux/fs.h>
+#include <linux/errno.h>
+#include <asm/current.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/device.h>
+#include <linux/err.h>
+#include <asm/uaccess.h>
+//#include <stdint.h>
+#include "stm32f4xx.h"
+#include "stm32f4xx_hal_gpio.h"
+#include "driver.h"
+
+
+
+
+static int major = MAJOR_GPIO_I2C;
+static int minor = 0;
+static dev_t devno;
+static struct cdev *gpio_i2c_cdev = NULL;
+static int count = 1;
+#define DEVNAME "gpio_i2c"
+
+static int gpio_i2c_open(struct inode *inode, struct file *filep);
+static int gpio_i2c_close(struct inode *inode, struct file *filep);
+static ssize_t gpio_i2c_read(struct file *filep, char __user *buf, size_t size, loff_t *offset);
+static ssize_t gpio__i2c_write(struct file *filep, const char __user *buf, size_t size, loff_t *offset);
+static int gpio_i2c_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg);
+static int gpio_i2c_transfer(gpio_i2c_t *pArg);
+static int gpio_i2c_receive(gpio_i2c_t *pArg);
+static struct file_operations gpio_i2c_ops = 
+{
+	.owner = THIS_MODULE,
+	.open = gpio_i2c_open,
+	.release = gpio_i2c_close,
+	.ioctl = gpio_i2c_ioctl,
+	.read = gpio_i2c_read,
+	.write = gpio_i2c_write,
+	
+};
+
+static int gpio_i2c_open(struct inode *inode, struct file *filep)
+{
+	//__HAL_RCC_GPIOC_CLK_ENABLE();
+	return 0;
+}
+
+static int gpio_i2c_close(struct inode *inode, struct file *filep)
+{
+	return 0;
+}
+
+static int gpio_i2c_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg)
+{
+	gpio_i2c_t gpio_i2c_arg;
+	if ( copy_from_user(&gpio_i2c_arg, (void*)arg, sizeof(gpio_i2c_t)) )
+		return -EFAULT;
+	
+	switch(cmd)
+	{
+		case GPIO_I2C_MASTER_TRANSFER:
+			HAL_GPIO_Init(gpio_arg.GPIOx, &gpio_arg.GPIO_Init);
+			break;
+		case GPIO_I2C_MASTER_RECEIVE:
+			HAL_GPIO_WritePin(gpio_arg.GPIOx, gpio_arg.GPIO_pin, gpio_arg.Data);
+		
+			gpio_arg.Data = HAL_GPIO_ReadPin(gpio_arg.GPIOx, gpio_arg.GPIO_pin);
+			if ( copy_to_user((void*)arg, (void*)&gpio_arg, sizeof(gpio_t)))
+				return -EFAULT;
+			break;
+	default:
+		printk("---> Invalid action\n");
+		return -EINVAL;
+		break;		
+
+	}
+	return 0;
+}
+
+static ssize_t gpio_i2c_read(struct file *filep, char __user *buf, size_t size, loff_t *offset)
+{
+	return 0;
+}
+
+static ssize_t gpio_i2c_write(struct file *filep, const char __user *buf, size_t size, loff_t *offset)
+{
+	return 0;
+}
+
+static int gpio_i2c_transfer(gpio_i2c_t *pArg)
+{
+	//TODO:
+	return 0;
+}
+
+static int gpio_i2c_receive(gpio_i2c_t *pArg)
+{
+	//TODO:
+	return 0;
+}
+
+
+static void gpio_i2c_hw_init(void)
+{
+	GPIO_InitTypeDef  GPIO_InitStruct;
+	//config gpio
+	GPIO_InitStruct.Mode	= GPIO_MODE_OUTPUT_OD;
+	GPIO_InitStruct.Pull    = GPIO_PULLUP;
+	GPIO_InitStruct.Speed   = GPIO_SPEED_FAST;
+	//GPIO_I2C
+	GPIO_InitStruct.Pin		= GPIO_PIN_6 | GPIO_PIN_7;	//SCL | SDA
+	//HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+}
+
+static int __init gpio_i2c_init(void)
+{
+	int ret;
+	gpio_i2c_cdev = cdev_alloc();
+	if(gpio_i2c_cdev == NULL){
+		return -ENOMEM;
+	}
+
+	cdev_init(gpio_i2c_cdev,&gpio_i2c_ops);
+	devno = MKDEV(major,minor);
+	ret = register_chrdev_region(devno, count, DEVNAME);
+	if(ret){
+		goto ERR_STEP;
+	}
+	
+	ret = cdev_add(gpio_i2c_cdev, devno, count);
+	if(ret){
+		goto ERR_STEP1;
+	}
+
+	gpio_i2c_hw_init();
+	return 0;
+
+ERR_STEP1:
+	unregister_chrdev_region(devno,count);
+ERR_STEP:
+	cdev_del(gpio_i2c_cdev);
+	return ret;
+}
+
+static void __exit gpio_i2c_exit(void)
+{
+	unregister_chrdev_region(MKDEV(major,minor),count);
+	cdev_del(gpio_i2c_cdev);
+}
+
+module_init(gpio_i2c_init);
+module_exit(gpio_i2c_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Jimbo");
+MODULE_DESCRIPTION("this is gpio_i2c module");
+
+
+

+ 1 - 1
app/driver/I2C/.i2c.ko.cmd

@@ -1 +1 @@
-cmd_/stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko := arm-uclinuxeabi-ld -EL -r  -T /stm32f429/linux-cortexm-1.14.2/linux/scripts/module-common.lds  -o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.mod.o
+cmd_/gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko := arm-uclinuxeabi-ld -EL -r  -T /gd32f450_prj/linux-cortexm-1.14.2/linux/scripts/module-common.lds  -o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.mod.o

+ 2 - 2
app/driver/I2C/.tmp_versions/i2c.mod

@@ -1,2 +1,2 @@
-/stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko
-/stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/system_stm32f4xx.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o /stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c_main.o
+/gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko
+/gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/system_stm32f4xx.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o /gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c_main.o

+ 8 - 2
app/driver/I2C/Makefile

@@ -12,8 +12,14 @@ i2c-objs += ../STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o
 
 i2c-objs += i2c_main.o
 
-EXTRA_CFLAGS	+= -I$(INSTALL_ROOT)/projects/ls1046a/app/driver/STM32F4xx_HAL_Driver
-EXTRA_CFLAGS	+= -I$(INSTALL_ROOT)/projects/ls1046a/app/driver/STM32F4xx_HAL_Driver/Inc
+APPDIR := $(INSTALL_ROOT)/projects/gd32450i-eval/app
+
+EXTRA_CFLAGS	+= -I$(APPDIR)/driver
+EXTRA_CFLAGS	+= -I$(APPDIR)/driver/STM32F4xx_HAL_Driver
+EXTRA_CFLAGS	+= -I$(APPDIR)/driver/STM32F4xx_HAL_Driver/Inc
+EXTRA_CFLAGS	+= -I$(APPDIR)/driver/STM32F4xx_HAL_Driver/Inc/Legacy
+EXTRA_CFLAGS	+= -I$(APPDIR)/common_include
+
 
 modules	:
 	make -C $(KERNELDIR) M=`pwd` modules CFLAGS="" LDFLAGS=""

BIN
app/driver/I2C/i2c.ko


+ 2 - 30
app/driver/I2C/i2c_main.c

@@ -20,6 +20,8 @@
 #include <linux/wait.h>
 
 #include "stm32f4xx.h"
+#include "stm32f4xx_hal_gpio.h"
+#include "stm32_hal_legacy.h"
 #include "driver.h"
 
 
@@ -38,16 +40,6 @@ static uint8_t i2c_rcv_size;
 static DECLARE_WAIT_QUEUE_HEAD(wq);
 static volatile int ev_press = 0;
 
-typedef struct {
-	uint32_t ClockSpeed;		/*!< Specifies the clock frequency.
-								 This parameter must be set to a value lower than 400kHz */
-	uint32_t OwnAddress1;		/*!< Specifies the first device own address.
-								 This parameter must be a 7-bit address. */
-	uint8_t	 DevAddress;		/* 7 bit */
-	uint8_t  buf[100];
-	uint8_t	 Size;
-
-} i2c_arg_t;
 
 struct i2c_device {
 	dev_t devno;
@@ -90,19 +82,16 @@ static int i2c_open(struct inode *inode, struct file *filep)
 	switch(iminor)
 	{
 	case 0:
-		printk("I2C1 opened\n");
 		HAL_NVIC_EnableIRQ(I2C1_EV_IRQn);
 		HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);
 		hi2c.Instance = I2C1;
 		break;
 	case 1:
-		printk("I2C2 opened\n");
 		HAL_NVIC_EnableIRQ(I2C2_EV_IRQn);
 		HAL_NVIC_EnableIRQ(I2C2_ER_IRQn);
 		hi2c.Instance = I2C2;
 		break;
 	case 2:
-		printk("I2C3 opened\n");
 		HAL_NVIC_EnableIRQ(I2C3_EV_IRQn);
 		HAL_NVIC_EnableIRQ(I2C3_ER_IRQn);
 		hi2c.Instance = I2C3;
@@ -116,7 +105,6 @@ static int i2c_open(struct inode *inode, struct file *filep)
 	hi2c.State = HAL_I2C_STATE_READY;
 	__HAL_I2C_ENABLE(&hi2c);
 	HAL_I2C_EnableListen_IT(&hi2c);
-	printk("OAR1 %#x, SR1 %#x, SR2 %#x, CR1 %#x, CR2 %#x\n", hi2c.Instance->OAR1, hi2c.Instance->SR1, hi2c.Instance->SR2, hi2c.Instance->CR1, hi2c.Instance->CR2 );
 	return 0;
 }
 
@@ -206,15 +194,12 @@ irqreturn_t i2cEvIRQHandler(int irqno, void *dev_id)
 	{
 	case I2C1_EV_IRQn:
 		hi2c.Instance = I2C1;
-		printk("i2c1 EvIRQ,");
 		break;
 	case I2C2_EV_IRQn:
 		hi2c.Instance = I2C2;
-		printk("i2c2 EvIRQ,");
 		break;
 	case I2C3_EV_IRQn:
 		hi2c.Instance = I2C3;
-		printk("i2c3 EvIRQ,");
 		break;
 	default: 
 		return IRQ_HANDLED;
@@ -226,13 +211,10 @@ irqreturn_t i2cEvIRQHandler(int irqno, void *dev_id)
 	itsources   = READ_REG(hi2c.Instance->CR2);
 	CurrentMode = hi2c.Mode;
    
-	printk("sr2 %#x, sr1 %#x, cr2: %#x\n", sr2itflags, sr1itflags, itsources);
 	/* Slave mode selected */
 	/* ADDR set --------------------------------------------------------------*/
 	if(((sr1itflags & I2C_FLAG_ADDR) != RESET) && ((itsources & I2C_IT_EVT) != RESET))
 	{
-		printk("ADDR set\n");
-
 		memset(i2c_rcv_buf, 0, sizeof(i2c_rcv_buf));
 		i2c_rcv_size = 0;
 		i2c_rcv_buf[i2c_rcv_size++] = hi2c.Instance->OAR1 & 0xff;
@@ -241,17 +223,12 @@ irqreturn_t i2cEvIRQHandler(int irqno, void *dev_id)
 	}
 	else if(((sr1itflags & I2C_FLAG_RXNE) != RESET))
 	{
-		//I2C_SlaveReceive_RXNE(&hi2c);
-		printk("RXNE set and BTF reset\n");
 		i2c_rcv_buf[i2c_rcv_size++] = hi2c.Instance->DR;
 
 	}
 	/* STOPF set --------------------------------------------------------------*/
 	else if(((sr1itflags & I2C_FLAG_STOPF) != RESET) && ((itsources & I2C_IT_EVT) != RESET))
 	{
-		//I2C_Slave_STOPF(&hi2c);
-		printk("STOPF set\n");
-
 		ev_press	= 1;
 		wake_up_interruptible(&wq);
 
@@ -319,8 +296,6 @@ static int i2c_ioctl(struct inode *inode, struct file *filep, unsigned int cmd,
 		return -EFAULT;
 	}
 
-	printk("ioctl cmd: %#x, clock: %d, ownAddr: %#x, DevAddr: %#x, buf[0]: %#x, size: %d\n", 
-			cmd, i2c_arg.ClockSpeed, i2c_arg.OwnAddress1, i2c_arg.DevAddress, i2c_arg.buf[0], i2c_arg.Size);
 	switch(cmd)
 	{
 	case SET_I2C_SPEED:
@@ -355,7 +330,6 @@ static int i2c_ioctl(struct inode *inode, struct file *filep, unsigned int cmd,
 		
 		/* Configure I2Cx: Own Address1 and addressing mode */
 		I2CxHandle.Instance->OAR1 = (I2C_ADDRESSINGMODE_7BIT | i2c_arg.OwnAddress1)&0xff;
-		printk("OAR1: %#x\n", I2CxHandle.Instance->OAR1);
 		
 		__HAL_I2C_ENABLE(&I2CxHandle);
 		HAL_NVIC_EnableIRQ(I2CxEvIRQn);
@@ -365,7 +339,6 @@ static int i2c_ioctl(struct inode *inode, struct file *filep, unsigned int cmd,
 		i2c_arg.OwnAddress1	= I2CxHandle.Instance->OAR1 & 0x0ff;
 		if(copy_to_user((void*)arg, &i2c_arg, sizeof(i2c_arg_t)))
 			return -EFAULT;
-		printk("OAR1: %#x\n", I2CxHandle.Instance->OAR1);
 		break;
 
 	case I2C_MASTER_TRANSFER:
@@ -551,7 +524,6 @@ static int __init i2c_init(void)
 		}
 	
 	}
-	printk("i2c module init ok, ");
 	return 0;
 
 ERR_STEP1:

+ 1 - 1
app/driver/I2C/modules.order

@@ -1 +1 @@
-kernel//stm32f429/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko
+kernel//gd32f450_prj/linux-cortexm-1.14.2/projects/gd32450i-eval/app/driver/I2C/i2c.ko

+ 25 - 0
app/driver/driver.h

@@ -11,6 +11,7 @@
 #define MAJOR_GPIO	103
 #define MAJOR_SPI	104
 #define MAJOR_ADC	105
+#define MAJOR_GPIO_I2C 	106
 
 #define IOCTL_MAGIC	'x' 
 #define GENERATE_CMD(__MAGIC__, __MAJOR__, __CMD__)	\
@@ -48,6 +49,11 @@
 //#define ADC_STOP				GENERATE_CMD(IOCTL_MAGIC, MAJOR_ADC, 1)
 //#define ADC_START				GENERATE_CMD(IOCTL_MAGIC, MAJOR_ADC, 2)
 
+
+/* GPIO I2C command */
+#define GPIO_I2C_MASTER_TRANSFER		GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 0)
+#define GPIO_I2C_MASTER_RECEIVE			GENERATE_CMD(IOCTL_MAGIC, MAJOR_GPIO_I2C, 1)
+
 typedef struct {
 	uint32_t address;
 	uint16_t length;
@@ -61,4 +67,23 @@ typedef struct {
 	GPIO_InitTypeDef	GPIO_Init;
 } gpio_t;
 
+typedef struct {
+	uint8_t	 DevAddress;		/* 8 bit */
+	uint8_t  buf[100];
+	uint8_t	 Size;
+
+} gpio_i2c_t;
+
+
+typedef struct {
+	uint32_t ClockSpeed;		/*!< Specifies the clock frequency.
+								 This parameter must be set to a value lower than 400kHz */
+	uint32_t OwnAddress1;		/*!< Specifies the first device own address.
+								 This parameter must be a 7-bit address. */
+	uint8_t	 DevAddress;		/* 8 bit */
+	uint8_t  buf[100];
+	uint8_t	 Size;
+
+} i2c_arg_t;
+
 #endif /* __DRIVER_H__ */

+ 1 - 0
app/goahead-5.1.0/src/auth.txt

@@ -15,3 +15,4 @@
 #   Define a user
 #       user name=joshua password=2fd6e47ff9bb70c0465fd2f5c8e5305e roles=manager,purchaser
 #
+user name=admin password=2fd6e47ff9bb70c0465fd2f5c8e5305e roles=manager,purchaser

+ 1 - 1
app/hal_api/Makefile

@@ -3,7 +3,7 @@ CFLAGS		:= -Os -mcpu=cortex-m3 -mthumb
 LDFLAGS		:= -mcpu=cortex-m3 -mthumb -L$(INSTALL_ROOT)/A2F/root/usr/lib
 CC	= $(CROSS_COMPILE_APPS)gcc
 
-APPDIR := $(INSTALL_ROOT)/projects/SP19016_cfgFpga_yangxiao/app
+APPDIR := $(INSTALL_ROOT)/projects/gd32450i-eval/app
 
 #incldue
 CFLAGS	+= -I$(INSTALL_ROOT)/A2F/root/usr/include

+ 81 - 0
app/hal_api/hal_i2c_interface.c

@@ -0,0 +1,81 @@
+
+#include "driver.h"
+#include <linux/types.h>
+#include <stdio.h>
+#include <string.h>
+#include "com_gpio.h"
+#include "hal_interface_api.h"
+#include "linux/fcntl.h"
+
+#define DEV_NAME	"/dev/i2c"
+
+/*
+bus: 		1,2,3
+address: 	8bit
+*/
+int stm32_i2c_master_write(uint8_t bus, uint8_t address, uint8_t *pBuf, uint16_t size)
+{
+	int fd;
+	int ret;
+	uint8_t dev_name[10] = {0};
+	i2c_arg_t i2c_arg;
+
+	if((bus != 1) && (bus != 2) && (bus != 3))
+	{
+		printf("Invalid bus number %d\n", bus);
+		return -1;
+	}
+
+	sprintf(dev_name, "%s%d", DEV_NAME, bus);
+	fd = open(dev_name, O_RDWR);
+	if(fd == -1)
+	{
+		printf("Open %s failed!\n", DEV_NAME);
+	}
+
+	i2c_arg.DevAddress = address;
+	i2c_arg.Size = size;
+	memcpy(i2c_arg.buf, pBuf, size);
+	ret = ioctl(fd, I2C_MASTER_TRANSFER, &i2c_arg);
+	if(ret == -1)
+	{
+		printf("Write i2c failed!\n");
+	}
+
+	close(fd);
+	return 0;
+}
+
+int stm32_i2c_master_read(uint8_t bus, uint8_t address, uint8_t *pBuf, uint16_t size)
+{
+	int fd;
+	int ret;
+	uint8_t dev_name[10] = {0};
+	i2c_arg_t i2c_arg;
+
+	if((bus != 1) && (bus != 2) && (bus != 3))
+	{
+		printf("Invalid bus number %d\n", bus);
+		return -1;
+	}
+
+	sprintf(dev_name, "%s%d", DEV_NAME, bus);
+	fd = open(dev_name, O_RDWR);
+	if(fd == -1)
+	{
+		printf("Open %s failed!\n", DEV_NAME);
+	}
+
+	i2c_arg.DevAddress = address;
+	i2c_arg.Size = size;
+	ret = ioctl(fd, I2C_MASTER_RECEIVE, &i2c_arg);
+	if(ret == -1)
+	{
+		printf("Read i2c failed!\n");
+	}
+	memcpy(pBuf, i2c_arg.buf, size);
+
+	close(fd);
+
+	return 0;
+}

+ 3 - 0
app/hal_api/hal_interface_api.h

@@ -10,7 +10,10 @@
 void  stm32_gpio_init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init);
 void stm32_gpio_write(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
 GPIO_PinState stm32_gpio_read(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
+
 /* I2C Interface */
+int stm32_i2c_master_write(uint8_t bus, uint8_t address, uint8_t *pBuf, uint16_t size);
+int stm32_i2c_master_read(uint8_t bus, uint8_t address, uint8_t *pBuf, uint16_t size);
 
 /* FMC Interface */
 int fmc_write_8bit(uint32_t address, uint8_t *buf, uint32_t len);

BIN
gd32450i-eval.uImage


+ 39 - 2
local/rc

@@ -7,6 +7,43 @@ mkdir /mnt
 ifconfig lo 127.0.0.1
 # ifconfig eth0 172.17.0.199
 
-#run bmc function 
-#./usr/bin/bmc.sh 
 
+
+
+
+
+
+
+
+
+
+
+# user configure
+
+#install module
+#insmod /usr/bin/test_module.ko
+insmod /usr/bin/gpio.ko 
+insmod /usr/bin/i2c.ko
+#insmod /usr/bin/fmc.ko
+insmod /usr/bin/platform_STM32F429.ko
+#insmod /usr/bin/adc.ko
+
+#create node
+#mknod /dev/test_module c 99 0
+mknod /dev/platform c 100 0
+mknod /dev/i2c1 c 101 0
+mknod /dev/i2c2 c 101 1
+mknod /dev/i2c3 c 101 2
+mknod /dev/fmc_cpld c 102 0
+mknod /dev/gpio c 103 0 
+mknod /dev/adc1 c 105 0
+mknod /dev/adc2 c 105 1
+mknod /dev/adc3 c 105 2
+
+
+
+/bin/telnetd
+#run bmc function 
+#/usr/bin/bmc_app & 
+#/usr/bin/test_app &
+#/usr/bin/goahead -v --home /etc/goahead /var/www/goahead &