Skip to content

Commit b6a8297

Browse files
author
Lee Jackson
committed
Add mega ccm driver support
Signed-off-by: Lee Jackson <[email protected]>
1 parent 0054ab7 commit b6a8297

File tree

11 files changed

+545
-2
lines changed

11 files changed

+545
-2
lines changed

CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ if(IDF_TARGET STREQUAL "esp32" OR IDF_TARGET STREQUAL "esp32s2" OR IDF_TARGET ST
4141
sensors/sc101iot.c
4242
sensors/sc030iot.c
4343
sensors/sc031gs.c
44+
sensors/mega_ccm.c
4445
)
4546

4647
list(APPEND priv_include_dirs

Kconfig

+7
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,13 @@ menu "Camera configuration"
117117
Enable this option if you want to use the SC031GS.
118118
Disable this option to save memory.
119119

120+
config MEGA_CCM_SUPPORT
121+
bool "Support MEGA CCM 5MP"
122+
default y
123+
help
124+
Enable this option if you want to use the MEGA CCM.
125+
Disable this option to save memory.
126+
120127
choice SCCB_HARDWARE_I2C_PORT
121128
bool "I2C peripheral to use for SCCB"
122129
default SCCB_HARDWARE_I2C_PORT1

driver/esp_camera.c

+6
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
#if CONFIG_SC031GS_SUPPORT
7070
#include "sc031gs.h"
7171
#endif
72+
#if CONFIG_MEGA_CCM_SUPPORT
73+
#include "mega_ccm.h"
74+
#endif
7275

7376
#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
7477
#include "esp32-hal-log.h"
@@ -143,6 +146,9 @@ static const sensor_func_t g_sensors[] = {
143146
#if CONFIG_SC031GS_SUPPORT
144147
{sc031gs_detect, sc031gs_init},
145148
#endif
149+
#if CONFIG_MEGA_CCM_SUPPORT
150+
{mega_ccm_detect, mega_ccm_init},
151+
#endif
146152
};
147153

148154
static esp_err_t camera_probe(const camera_config_t *config, camera_model_t *out_camera_model)

driver/include/sensor.h

+6
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ typedef enum {
3131
SC101IOT_PID = 0xda4a,
3232
SC030IOT_PID = 0x9a46,
3333
SC031GS_PID = 0x0031,
34+
MEGA_CCM_PID =0x039E,
3435
} camera_pid_t;
3536

3637
typedef enum {
@@ -48,6 +49,7 @@ typedef enum {
4849
CAMERA_SC101IOT,
4950
CAMERA_SC030IOT,
5051
CAMERA_SC031GS,
52+
CAMERA_MEGA_CCM,
5153
CAMERA_MODEL_MAX,
5254
CAMERA_NONE,
5355
} camera_model_t;
@@ -67,6 +69,7 @@ typedef enum {
6769
SC101IOT_SCCB_ADDR = 0x68,// 0xd0 >> 1
6870
SC030IOT_SCCB_ADDR = 0x68,// 0xd0 >> 1
6971
SC031GS_SCCB_ADDR = 0x30,
72+
MEGA_CCM_SCCB_ADDR = 0x1F, // 0x3E >> 1
7073
} camera_sccb_addr_t;
7174

7275
typedef enum {
@@ -84,10 +87,12 @@ typedef enum {
8487
typedef enum {
8588
FRAMESIZE_96X96, // 96x96
8689
FRAMESIZE_QQVGA, // 160x120
90+
FRAMESIZE_128X128, // 128x128
8791
FRAMESIZE_QCIF, // 176x144
8892
FRAMESIZE_HQVGA, // 240x176
8993
FRAMESIZE_240X240, // 240x240
9094
FRAMESIZE_QVGA, // 320x240
95+
FRAMESIZE_320X320, // 320x320
9196
FRAMESIZE_CIF, // 400x296
9297
FRAMESIZE_HVGA, // 480x320
9398
FRAMESIZE_VGA, // 640x480
@@ -106,6 +111,7 @@ typedef enum {
106111
FRAMESIZE_WQXGA, // 2560x1600
107112
FRAMESIZE_P_FHD, // 1080x1920
108113
FRAMESIZE_QSXGA, // 2560x1920
114+
FRAMESIZE_5MP, // 2592x1944
109115
FRAMESIZE_INVALID
110116
} framesize_t;
111117

driver/sensor.c

+4
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,18 @@ const camera_sensor_info_t camera_sensor[CAMERA_MODEL_MAX] = {
1717
{CAMERA_SC101IOT, "SC101IOT", SC101IOT_SCCB_ADDR, SC101IOT_PID, FRAMESIZE_HD, false},
1818
{CAMERA_SC030IOT, "SC030IOT", SC030IOT_SCCB_ADDR, SC030IOT_PID, FRAMESIZE_VGA, false},
1919
{CAMERA_SC031GS, "SC031GS", SC031GS_SCCB_ADDR, SC031GS_PID, FRAMESIZE_VGA, false},
20+
{CAMERA_MEGA_CCM, "MEGA_CCM", MEGA_CCM_SCCB_ADDR, MEGA_CCM_PID, FRAMESIZE_5MP, true},
2021
};
2122

2223
const resolution_info_t resolution[FRAMESIZE_INVALID] = {
2324
{ 96, 96, ASPECT_RATIO_1X1 }, /* 96x96 */
25+
{ 128, 128, ASPECT_RATIO_1X1 }, /* 128x128 */
2426
{ 160, 120, ASPECT_RATIO_4X3 }, /* QQVGA */
2527
{ 176, 144, ASPECT_RATIO_5X4 }, /* QCIF */
2628
{ 240, 176, ASPECT_RATIO_4X3 }, /* HQVGA */
2729
{ 240, 240, ASPECT_RATIO_1X1 }, /* 240x240 */
2830
{ 320, 240, ASPECT_RATIO_4X3 }, /* QVGA */
31+
{ 320, 320, ASPECT_RATIO_1X1 }, /* 320x320 */
2932
{ 400, 296, ASPECT_RATIO_4X3 }, /* CIF */
3033
{ 480, 320, ASPECT_RATIO_3X2 }, /* HVGA */
3134
{ 640, 480, ASPECT_RATIO_4X3 }, /* VGA */
@@ -44,6 +47,7 @@ const resolution_info_t resolution[FRAMESIZE_INVALID] = {
4447
{ 2560, 1600, ASPECT_RATIO_16X10 }, /* WQXGA */
4548
{ 1088, 1920, ASPECT_RATIO_9X16 }, /* Portrait FHD */
4649
{ 2560, 1920, ASPECT_RATIO_4X3 }, /* QSXGA */
50+
{ 2592, 1944, ASPECT_RATIO_4X3 }, /* 5MP */
4751
};
4852

4953
camera_sensor_info_t *esp_camera_sensor_get_info(sensor_id_t *id)
+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
idf_component_register(SRCS take_picture.c
22
PRIV_INCLUDE_DIRS .
3-
PRIV_REQUIRES nvs_flash)
3+
PRIV_REQUIRES nvs_flash esp_psram)

examples/camera_example/main/take_picture.c

+20-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
// 1. Board setup (Uncomment):
88
// #define BOARD_WROVER_KIT
99
// #define BOARD_ESP32CAM_AITHINKER
10+
// #define BOARD_ESP32S3_WROOM
1011

1112
/**
1213
* 2. Kconfig setup
@@ -92,7 +93,25 @@
9293
#define CAM_PIN_PCLK 22
9394

9495
#endif
95-
96+
// ESP32S3 (WROOM) PIN Map
97+
#ifdef BOARD_ESP32S3_WROOM
98+
#define CAM_PIN_PWDN 38
99+
#define CAM_PIN_RESET -1 //software reset will be performed
100+
#define CAM_PIN_VSYNC 6
101+
#define CAM_PIN_HREF 7
102+
#define CAM_PIN_PCLK 13
103+
#define CAM_PIN_XCLK 15
104+
#define CAM_PIN_SIOD 4
105+
#define CAM_PIN_SIOC 5
106+
#define CAM_PIN_D0 11
107+
#define CAM_PIN_D1 9
108+
#define CAM_PIN_D2 8
109+
#define CAM_PIN_D3 10
110+
#define CAM_PIN_D4 12
111+
#define CAM_PIN_D5 18
112+
#define CAM_PIN_D6 17
113+
#define CAM_PIN_D7 16
114+
#endif
96115
static const char *TAG = "example:take_picture";
97116

98117
#if ESP_CAMERA_SUPPORTED

0 commit comments

Comments
 (0)