diff --git a/communications/include/serial_console.h b/communications/include/serial_console.h
index e21d13fd147c8ee3d2a863894cf37a00d1fd9810..e0b20230a7b37bc5976a1359774d69858193425a 100644
--- a/communications/include/serial_console.h
+++ b/communications/include/serial_console.h
@@ -12,6 +12,8 @@ void serial_console_init(uint32_t baudrate);
 uint8_t serial_console_get_num_data(void);
 int cm510_printf(const char *fmt, ...);
 int cm510_scanf(const char *fmt, ... );
+uint8_t cm510_read(uint8_t *data,uint8_t len);
+uint8_t cm510_write(uint8_t *data,uint8_t len);
 
 #ifdef __cplusplus
 }
diff --git a/communications/src/serial_console.c b/communications/src/serial_console.c
index af72a027b39da22565406ddc29c855ccda09e069..2deb73ddd58fb5742abb80a3ef1158832e58b19a 100644
--- a/communications/src/serial_console.c
+++ b/communications/src/serial_console.c
@@ -48,7 +48,6 @@ void serial_console_set_baudrate(uint32_t baudrate)
 
 int serial_console_putchar(char c,FILE *dev)
 {
-
   if(c=='\n')
   {
     serial_console_tx_buffer[serial_console_tx_write_ptr]='\r';
@@ -156,3 +155,49 @@ int cm510_scanf(const char *fmt, ...)
   
   return done;
 }
+
+uint8_t cm510_read(uint8_t *data,uint8_t len)
+{
+  uint8_t i;
+
+  for(i=0;i<len;i++)
+  {
+    if(serial_console_rx_num_data>0)
+    {
+      data[i]=serial_console_rx_buffer[serial_console_rx_read_ptr];
+      serial_console_rx_read_ptr=(serial_console_rx_read_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN;
+      serial_console_rx_num_data--;
+    }
+    else
+      break;
+  }
+
+  return i;
+}
+
+uint8_t cm510_write(uint8_t *data,uint8_t len)
+{
+  uint8_t i;
+
+  for(i=0;i<len;i++)
+  {
+    if(serial_console_sending==0x00)
+    {
+      UDR1=data[i];
+      serial_console_sending=0x01;
+    }
+    else
+    {
+      if(serial_console_tx_num_data<SERIAL_CONSOLE_MAX_BUFFER_LEN)
+      {
+        serial_console_tx_buffer[serial_console_tx_write_ptr]=data[i];
+        serial_console_tx_write_ptr=(serial_console_tx_write_ptr+1)%SERIAL_CONSOLE_MAX_BUFFER_LEN;
+        serial_console_tx_num_data++;
+      }
+      else 
+        break;
+    } 
+  }
+
+  return i;
+}