David Fletcher / Mbed 2 deprecated cc3100_Test_websock_Camera_CM4F

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
dflet
Date:
Mon Jul 13 08:20:40 2015 +0000
Parent:
12:7d75ba5deed1
Child:
14:90603ea1e85b
Commit message:
WIP commit 14 i2c not working correctly.

Changed in this revision

FreeRTOS/FreeRTOSConfig.h Show annotated file Show diff for this revision Revisions of this file
camera_app/camera_app.cpp Show annotated file Show diff for this revision Revisions of this file
camera_app/mt9d111/i2cconfig.cpp Show annotated file Show diff for this revision Revisions of this file
camera_app/mt9d111/i2cconfig.h Show annotated file Show diff for this revision Revisions of this file
camera_app/mt9d111/mt9d111.cpp Show annotated file Show diff for this revision Revisions of this file
camera_app/mt9d111/mt9d111.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
utils/app_config.h Show annotated file Show diff for this revision Revisions of this file
--- a/FreeRTOS/FreeRTOSConfig.h	Sun Jul 12 09:13:56 2015 +0000
+++ b/FreeRTOS/FreeRTOSConfig.h	Mon Jul 13 08:20:40 2015 +0000
@@ -86,8 +86,8 @@
 #define configCPU_CLOCK_HZ			( ( unsigned long ) SystemCoreClock )
 #define configTICK_RATE_HZ			( ( portTickType ) 1000 )
 #define configMINIMAL_STACK_SIZE	( ( unsigned short ) 130 )
-#define configTOTAL_HEAP_SIZE		( ( size_t ) (20 * 1024) )
-#define configMAX_TASK_NAME_LEN		( 16 )
+#define configTOTAL_HEAP_SIZE		( ( size_t ) (48 * 1024) )
+#define configMAX_TASK_NAME_LEN		( 24 )
 #define configUSE_TRACE_FACILITY	1
 #define configUSE_16_BIT_TICKS		0
 #define configIDLE_SHOULD_YIELD		1//0
--- a/camera_app/camera_app.cpp	Sun Jul 12 09:13:56 2015 +0000
+++ b/camera_app/camera_app.cpp	Mon Jul 13 08:20:40 2015 +0000
@@ -272,6 +272,8 @@
     //   
     I2CInit();
     
+    getCamId();
+    
     //
     // Initialize camera sensor
     //
@@ -362,11 +364,11 @@
 //    HttpDebug("frame size = 0x%x \r\n",g_frame_size_in_bytes);
     
     uint8_t* Image = reinterpret_cast<uint8_t*>(&g_image.g_image_buffer);
-#if 0    
+//#if 0    
     for(int i =0;i< 10;i++){
     	HttpDebug("0x%x ",Image[i]);
     }
-#endif//if 0    
+//#endif//if 0    
     //
     // Create JPEG Header
     //
--- a/camera_app/mt9d111/i2cconfig.cpp	Sun Jul 12 09:13:56 2015 +0000
+++ b/camera_app/mt9d111/i2cconfig.cpp	Mon Jul 13 08:20:40 2015 +0000
@@ -50,7 +50,7 @@
 #include "myBoardInit.h"
 
 I2C i2c(PB_9, PB_8);
-
+int fail_count;
 
 //*****************************************************************************
 //
@@ -63,7 +63,7 @@
 uint32_t I2CInit()
 {
 //    Uart_Write((uint8_t*)"I2CInit \n\r");
-    i2c.frequency (100000); 
+    i2c.frequency (400000); 
 
     return 0;
 }
@@ -84,30 +84,31 @@
 //! \return 0: Success, < 0: Failure.
 //
 //****************************************************************************
-uint32_t I2CBufferRead(int32_t ucDevAddr, char *ucBuffer,
+int32_t I2CBufferRead(int32_t ucDevAddr, uint8_t *ucBuffer,
                             int32_t ulSize, unsigned char ucFlags)
 {
 //	Uart_Write((uint8_t*)"I2CBufferRead \n\r");
 //    uint32_t ulNdx;
-    bool err;
-/*    if(ucFlags == I2C_SEND_START){
+    int ack;
+//    if(ucFlags == I2C_SEND_START){
     	i2c.start(); 	   
-    }
-*/    
+//    }
+    
     // Set I2C slave address
-    err = i2c.read(0xBB, ucBuffer, ulSize);
-/*    
+    ack = i2c.read(ucDevAddr, (char*)ucBuffer, ulSize);
+    wait_us(20);
     if(ucFlags == I2C_SEND_STOP){
     	i2c.stop();
     }
-*/    
+    
 //    for(int i = 0;i<ulSize;i++){
 //    	printf("0x%x ",ucBuffer[i]);
 //    }
 //    printf("\r\n");	
-//    if(err){
-//    	return 1;
-//    }
+    if(ack != 0){
+    	printf("NAK returned\r\n");
+    	return -1;
+    }
     
     return 0;
 }
@@ -128,30 +129,58 @@
 //
 //****************************************************************************
 
-uint32_t I2CBufferWrite(int32_t ucDevAddr, char *ucBuffer,
+int32_t I2CBufferWrite(int32_t ucDevAddr, uint8_t *ucBuffer,
                              int32_t ulSize,unsigned char ucFlags)
 {
 //	Uart_Write((uint8_t*)"I2CBufferWrite \n\r");
 //    uint32_t ulNdx;
-    bool err;
-/*    if(ucFlags == I2C_SEND_START){
+    
+    int ack;
+//    if(ucFlags == I2C_SEND_START){
     	i2c.start(); 	   
-    }
-*/    
+//    }
+    
    // Set I2C slave address
-    err = i2c.write(ucDevAddr, ucBuffer, ulSize);
-/*    
+    ack = i2c.write(ucDevAddr, (char*)ucBuffer, ulSize);
+    wait_us(20);
     if(ucFlags == I2C_SEND_STOP){
     	i2c.stop();
     }
+    fail_count++;
+/*
+   for(int i = 0;i<ulSize;i++){
+    	printf("0x%x ",ucBuffer[i]);
+    }
+    printf("\r\n");	
 */    
-//    if(!err){
-//    	return 1;
-//    }
+    if(ack != 0){
+    	printf("NAK returned on write %d\r\n",fail_count);
+    	return -1;
+    }
 
     return 0;
 }
 
+void I2CBufferWriteByte(char dat){
+    
+    int ack, ack2 = 0;
+    
+//    i2c.start();
+	ack = i2c.write((int)dat);
+	wait_us(20);
+	if(ack == 1){		
+		ack2 = i2c.write((int)0x00);
+		wait_us(20);
+//		i2c.stop();
+	}else{
+//		i2c.stop();
+		printf("NAK received\r\n");
+	}
+	if(ack2 != 1){
+		printf("NAK received\r\n");
+	}		
+}	
+
 //*****************************************************************************
 //
 // Close the Doxygen group.
--- a/camera_app/mt9d111/i2cconfig.h	Sun Jul 12 09:13:56 2015 +0000
+++ b/camera_app/mt9d111/i2cconfig.h	Mon Jul 13 08:20:40 2015 +0000
@@ -60,11 +60,11 @@
 // APIs
 //******************************************************************************
 uint32_t I2CInit(void);
-uint32_t I2CBufferRead(int32_t ucDevAddr, char *ucBuffer,
+int32_t I2CBufferRead(int32_t ucDevAddr, uint8_t *ucBuffer,
                             int32_t ulSize,unsigned char ucFlags);
-uint32_t I2CBufferWrite(int32_t ucDevAddr, char *ucBuffer,
+int32_t I2CBufferWrite(int32_t ucDevAddr, uint8_t *ucBuffer,
                              int32_t ulSize,unsigned char ucFlags);
-
+void I2CBufferWriteByte(char dat);
 //*****************************************************************************
 //
 // Mark the end of the C bindings section for C++ compilers.
--- a/camera_app/mt9d111/mt9d111.cpp	Sun Jul 12 09:13:56 2015 +0000
+++ b/camera_app/mt9d111/mt9d111.cpp	Mon Jul 13 08:20:40 2015 +0000
@@ -44,17 +44,19 @@
 #include <stdio.h>
 #include <stdbool.h>
 #include <stdint.h>
+#include "mbed.h"
 #include "mt9d111.h"
 
 #include "i2cconfig.h"
 #include "cc3100_sl_common.h"
 #include "cli_uart.h"
+#include "HttpDebug.h"
 
 #define RET_OK                  0
 #define RET_ERROR               -1
 #define SENSOR_PAGE_REG         0xF0
-#define CAM_I2C_SLAVE_ADDR      0xBA//((0xBA >> 1))//Write
-//#define CAM_I2C_SLAVE_ADDR      0xBB((0xBB >> 1))//Read
+#define CAM_I2C_SLAVE_WRITE     0x5D//((0xBA >> 1))//Write
+#define CAM_I2C_SLAVE_READ      0x5E//((0xBB >> 1))//Read
 
 #ifndef ENABLE_JPEG
 static const s_RegList preview_on_cmd_list[]= {
@@ -290,6 +292,27 @@
     {1, 0xC8, 0x0005    }, // SEQ_CMD
 };
 
+void getCamId(){
+    
+    uint16_t Id = 0;
+    uint8_t ucBuffer[20];
+    
+    ucBuffer[0] = 0x00;
+    ucBuffer[1] = 0x00;
+//    i2c.start();
+    I2CBufferWrite(CAM_I2C_SLAVE_WRITE,ucBuffer,1,1);
+//    I2CBufferWrite(CAM_I2C_SLAVE_WRITE,);
+//    i2c.stop();
+//    i2c.start();
+//    I2CBufferWriteByte();            
+    I2CBufferRead(CAM_I2C_SLAVE_READ,ucBuffer,2,1);
+//    i2c.stop();    
+    Id = (uint16_t)ucBuffer[0] << 8 | (uint16_t)ucBuffer[1];
+
+    HttpDebug("\r\nCamera ID = 0x%x\r\n",Id);
+    
+}    
+
 //*****************************************************************************
 //
 //! This function initilizes the camera sensor
@@ -418,7 +441,7 @@
     unsigned int       ulNdx;
     unsigned short      usTemp;
     unsigned char       i;
-    char       ucBuffer[20];
+    uint8_t       ucBuffer[20];
     unsigned int       ulSize;
     int lRetVal = -1;
 
@@ -433,6 +456,7 @@
         {
             // PageAddr == 100, insret a delay equal to reg value 
             wait_ms(pRegLst->usValue);// * 80000/3);
+//            HttpDebug("usValue = 0x%x \n\r",pRegLst->usValue);
         }
         else if(pRegLst->ucPageAddr == 111)
         {
@@ -440,35 +464,37 @@
             do
             {
                 ucBuffer[0] = pRegLst->ucRegAddr;
-                lRetVal = I2CBufferWrite(CAM_I2C_SLAVE_ADDR,ucBuffer,1,1);
+                printf("pRegLst->ucRegAddr = 0x%x \r\n",pRegLst->ucRegAddr);
+                lRetVal = I2CBufferWrite(CAM_I2C_SLAVE_WRITE,ucBuffer,1,I2C_SEND_STOP);
                 ASSERT_ON_ERROR(lRetVal);
-                if(I2CBufferRead(CAM_I2C_SLAVE_ADDR,ucBuffer,2,1))
+                if(0 != I2CBufferWrite(CAM_I2C_SLAVE_READ,ucBuffer,2,I2C_SEND_STOP))
                 {
-                    Uart_Write((uint8_t*)"\n\rError reading ucBuffer \n\r");
+                    Uart_Write((uint8_t*)"\n\rError reading pRegLst->ucRegAddr \n\r");
                     return RET_ERROR;
                 }
 
                 usTemp = ucBuffer[0] << 8;
                 usTemp |= ucBuffer[1];
-                usTemp = pRegLst->usValue;//Temp debug
+//                usTemp = pRegLst->usValue;//Temp debug
             }while(usTemp != pRegLst->usValue);
         }
         else
         {
             // Set the page 
-            ucBuffer[0] = SENSOR_PAGE_REG;
+            ucBuffer[0] = SENSOR_PAGE_REG;//0xF0
             ucBuffer[1] = 0x00;
-            ucBuffer[2] = (unsigned char)(pRegLst->ucPageAddr);
-            if(0 != I2CBufferWrite(CAM_I2C_SLAVE_ADDR,ucBuffer,3,I2C_SEND_STOP))
+            ucBuffer[2] = pRegLst->ucPageAddr;
+            printf("pRegLst->ucRegAddr = 0x%x \r\n",pRegLst->ucRegAddr);
+            if(0 != I2CBufferWrite(CAM_I2C_SLAVE_WRITE, ucBuffer, 3, I2C_SEND_STOP))
             {
                 Uart_Write((uint8_t*)"\n\rError writing SENSOR_PAGE_REG \n\r");
                 return RET_ERROR;
             }
 
             ucBuffer[0] = SENSOR_PAGE_REG;
-            lRetVal = I2CBufferWrite(CAM_I2C_SLAVE_ADDR,ucBuffer,1,I2C_SEND_STOP);
+            lRetVal = I2CBufferWrite(CAM_I2C_SLAVE_WRITE, ucBuffer, 1, I2C_SEND_STOP);
             ASSERT_ON_ERROR(lRetVal);
-            lRetVal = I2CBufferRead(CAM_I2C_SLAVE_ADDR,ucBuffer,2,I2C_SEND_STOP);
+            lRetVal = I2CBufferWrite(CAM_I2C_SLAVE_READ, ucBuffer, 2, I2C_SEND_STOP);
             ASSERT_ON_ERROR(lRetVal);
 
             ucBuffer[0] = pRegLst->ucRegAddr;
@@ -498,7 +524,7 @@
                 ucBuffer[2] = (unsigned char)(pRegLst->usValue & 0xFF);
             }
 
-            if(0 != I2CBufferWrite(CAM_I2C_SLAVE_ADDR,ucBuffer,
+            if(0 != I2CBufferWrite(CAM_I2C_SLAVE_WRITE,ucBuffer,
                                                       ulSize,I2C_SEND_STOP))
             {
                 Uart_Write((uint8_t*)"\n\rError i2c write \n\r");
--- a/camera_app/mt9d111/mt9d111.h	Sun Jul 12 09:13:56 2015 +0000
+++ b/camera_app/mt9d111/mt9d111.h	Mon Jul 13 08:20:40 2015 +0000
@@ -19,6 +19,8 @@
     unsigned short usValue;
 } s_RegList;
 
+void getCamId(void);
+
 /*!
     \brief                      This function initilizes the camera sensor
 
--- a/main.cpp	Sun Jul 12 09:13:56 2015 +0000
+++ b/main.cpp	Mon Jul 13 08:20:40 2015 +0000
@@ -114,12 +114,12 @@
 //  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_4);
 
   /* RCC_MCODIV_1 16MHz mco1 output on pin PA_8 (cam xclk) */
-  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
+//  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1);
 
   /* RCC_MCODIV_1 8MHz mco2 output on pin PC_9 (cam xclk) */ 
   /* RCC_MCODIV_2 4MHz mco2 output on pin PC_9 (cam xclk) */ 
   /* RCC_MCODIV_4 2MHz mco2 output on pin PC_9 (cam xclk) */  
-//  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_HSE, RCC_MCODIV_1);
+  HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_HSE, RCC_MCODIV_1);
 
   //Used for ov7670 test
   /* RCC_MCODIV_4 24MHz mco2 output on pin PC_9 (cam xclk) */
--- a/utils/app_config.h	Sun Jul 12 09:13:56 2015 +0000
+++ b/utils/app_config.h	Mon Jul 13 08:20:40 2015 +0000
@@ -6,7 +6,7 @@
 #define SPAWN_TASK_PRIORITY            7//9
 #define HTTP_SERVER_APP_TASK_PRIORITY  1//1
 #define CAMERA_SERVICE_PRIORITY        1
-#define OSI_STACK_SIZE                 16 * 1024
+#define OSI_STACK_SIZE                 8 * 1024