forked from xuos/xiuos
add ch376 usb demo on xidatong-riscv64
This commit is contained in:
parent
540c9a84d5
commit
0f1d2a4868
|
@ -5,6 +5,27 @@
|
|||
|
||||
if ARCH_BOARD_XIDATONG_RISCV64
|
||||
|
||||
menuconfig BSP_USING_CH376
|
||||
bool "Using ch376 device"
|
||||
default n
|
||||
select K210_16550_UART
|
||||
select K210_16550_UART3
|
||||
|
||||
if BSP_USING_CH376
|
||||
|
||||
choice
|
||||
prompt "select ch376 function."
|
||||
default CH376_USB_FUNCTION
|
||||
|
||||
config CH376_USB_FUNCTION
|
||||
bool "select ch376 usb function"
|
||||
|
||||
config CH376_SD_FUNCTION
|
||||
bool "select ch376 sd function"
|
||||
endchoice
|
||||
|
||||
endif # BSP_USING_CH376
|
||||
|
||||
menuconfig BSP_USING_CH438
|
||||
bool "Using CH438 device"
|
||||
default n
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
include $(TOPDIR)/Make.defs
|
||||
|
||||
CSRCS = k210_bringup.c k210_boot.c k210_ch376.c
|
||||
CSRCS = k210_bringup.c k210_boot.c
|
||||
|
||||
ifeq ($(CONFIG_BOARDCTL_RESET),y)
|
||||
CSRCS += k210_reset.c
|
||||
|
@ -46,4 +46,8 @@ ifeq ($(CONFIG_BSP_USING_CH438),y)
|
|||
CSRCS += k210_ch438.c ch438_demo.c
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_BSP_USING_CH376),y)
|
||||
CSRCS += k210_ch376.c ch376_demo.c
|
||||
endif
|
||||
|
||||
include $(TOPDIR)/boards/Board.mk
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright (c) 2020 AIIT XUOS Lab
|
||||
* XiUOS is licensed under Mulan PSL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
* You may obtain a copy of Mulan PSL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPSL2
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PSL v2 for more details.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file ch376_demo.c
|
||||
* @brief xidatong-riscv64 ch376_demo.c
|
||||
* @version 1.0
|
||||
* @author AIIT XUOS Lab
|
||||
* @date 2022.10.11
|
||||
*/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
#include "k210_ch376.h"
|
||||
|
||||
uint8_t buf[64];
|
||||
|
||||
void CH376Demo(void)
|
||||
{
|
||||
uint8_t s;
|
||||
s = mInitCH376Host();
|
||||
printf ("ch376 init stat=0x%02x\n",(uint16_t)s);
|
||||
|
||||
printf( "Wait Udisk/SD\n" );
|
||||
while ( CH376DiskConnect( ) != USB_INT_SUCCESS )
|
||||
{
|
||||
up_mdelay( 100 );
|
||||
}
|
||||
|
||||
for ( s = 0; s < 10; s ++ )
|
||||
{
|
||||
up_mdelay( 50 );
|
||||
printf( "Ready ?\n" );
|
||||
if ( CH376DiskMount( ) == USB_INT_SUCCESS ) break;
|
||||
}
|
||||
s = CH376ReadBlock( buf );
|
||||
if ( s == sizeof( INQUIRY_DATA ) )
|
||||
{
|
||||
buf[ s ] = 0;
|
||||
printf( "UdiskInfo: %s\n", ((P_INQUIRY_DATA)buf) -> VendorIdStr );
|
||||
}
|
||||
|
||||
printf( "Create /YEAR2022/DEMO2022.TXT \n" );
|
||||
s = CH376DirCreate((PUINT8)"/YEAR2022" );
|
||||
printf("CH376DirCreate:0x%02x\n",(uint16_t)s );
|
||||
|
||||
s = CH376FileCreatePath((PUINT8)"/YEAR2022/DEMO2022.TXT" );
|
||||
printf( "CH376FileCreatePath:0x%02x\n",(uint16_t)s );
|
||||
|
||||
printf( "Write some data to file\n" );
|
||||
strcpy( (char *)buf, "This is 演示数据\xd\xa" );
|
||||
s = CH376ByteWrite(buf, strlen((char *)buf), NULL );
|
||||
printf( "CH376ByteWrite:0x%02x\n",(uint16_t)s );
|
||||
|
||||
printf( "Close\n" );
|
||||
s = CH376FileClose( TRUE );
|
||||
printf( "CH376FileClose:0x%02x\n",(uint16_t)s );
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -40,79 +40,85 @@
|
|||
|
||||
#define ERR_USB_UNKNOWN 0xFA
|
||||
|
||||
void xEndCH376Cmd( void );
|
||||
void xWriteCH376Cmd( UINT8 mCmd );
|
||||
void xWriteCH376Data( UINT8 mData );
|
||||
UINT8 xReadCH376Data( void );
|
||||
UINT8 Query376Interrupt( void );
|
||||
UINT8 mInitCH376Host( void );
|
||||
void xEndCH376Cmd( void );
|
||||
void xWriteCH376Cmd( UINT8 mCmd );
|
||||
void xWriteCH376Data( UINT8 mData );
|
||||
UINT8 xReadCH376Data( void );
|
||||
UINT8 Query376Interrupt( void );
|
||||
UINT8 mInitCH376Host( void );
|
||||
|
||||
#define STRUCT_OFFSET( s, m ) ( (UINT8)( & ((s *)0) -> m ) )
|
||||
#define STRUCT_OFFSET( s, m ) ( (UINT8)( & ((s *)0) -> m ) )
|
||||
|
||||
#ifdef EN_LONG_NAME
|
||||
#ifndef LONG_NAME_BUF_LEN
|
||||
#define LONG_NAME_BUF_LEN ( LONG_NAME_PER_DIR * 20 )
|
||||
#ifdef EN_LONG_NAME
|
||||
#ifndef LONG_NAME_BUF_LEN
|
||||
#define LONG_NAME_BUF_LEN ( LONG_NAME_PER_DIR * 20 )
|
||||
#endif
|
||||
#endif
|
||||
|
||||
UINT8 CH376ReadBlock( PUINT8 buf );
|
||||
UINT8 CH376WriteReqBlock( PUINT8 buf );
|
||||
UINT8 CH376ReadBlock( PUINT8 buf );
|
||||
UINT8 CH376WriteReqBlock( PUINT8 buf );
|
||||
void CH376WriteHostBlock( PUINT8 buf, UINT8 len );
|
||||
void CH376WriteOfsBlock( PUINT8 buf, UINT8 ofs, UINT8 len );
|
||||
void CH376SetFileName( PUINT8 name );
|
||||
UINT32 CH376Read32bitDat( void );
|
||||
UINT8 CH376ReadVar8( UINT8 var );
|
||||
void CH376WriteVar8( UINT8 var, UINT8 dat );
|
||||
UINT32 CH376ReadVar32( UINT8 var );
|
||||
void CH376WriteVar32( UINT8 var, UINT32 dat );
|
||||
void CH376EndDirInfo( void );
|
||||
UINT32 CH376GetFileSize( void );
|
||||
UINT8 CH376GetDiskStatus( void );
|
||||
UINT8 CH376GetIntStatus( void );
|
||||
|
||||
void CH376WriteHostBlock( PUINT8 buf, UINT8 len );
|
||||
void CH376WriteOfsBlock( PUINT8 buf, UINT8 ofs, UINT8 len );
|
||||
void CH376SetFileName( PUINT8 name );
|
||||
UINT32 CH376Read32bitDat( void );
|
||||
UINT8 CH376ReadVar8( UINT8 var );
|
||||
|
||||
void CH376WriteVar8( UINT8 var, UINT8 dat );
|
||||
UINT32 CH376ReadVar32( UINT8 var );
|
||||
void CH376WriteVar32( UINT8 var, UINT32 dat );
|
||||
void CH376EndDirInfo( void );
|
||||
UINT32 CH376GetFileSize( void );
|
||||
UINT8 CH376GetDiskStatus( void );
|
||||
UINT8 CH376GetIntStatus( void );
|
||||
|
||||
#ifndef NO_DEFAULT_CH376_INT
|
||||
UINT8 Wait376Interrupt( void );
|
||||
#ifndef NO_DEFAULT_CH376_INT
|
||||
UINT8 Wait376Interrupt( void );
|
||||
#endif
|
||||
|
||||
UINT8 CH376SendCmdWaitInt( UINT8 mCmd );
|
||||
UINT8 CH376SendCmdDatWaitInt( UINT8 mCmd, UINT8 mDat );
|
||||
UINT8 CH376DiskReqSense( void );
|
||||
UINT8 CH376DiskConnect( void );
|
||||
UINT8 CH376DiskMount( void );
|
||||
UINT8 CH376FileOpen( PUINT8 name );
|
||||
UINT8 CH376FileCreate( PUINT8 name );
|
||||
UINT8 CH376DirCreate( PUINT8 name );
|
||||
UINT8 CH376SeparatePath( PUINT8 path );
|
||||
UINT8 CH376FileOpenDir( PUINT8 PathName, UINT8 StopName );
|
||||
UINT8 CH376FileOpenPath( PUINT8 PathName );
|
||||
UINT8 CH376FileCreatePath( PUINT8 PathName );
|
||||
UINT8 CH376SendCmdWaitInt( UINT8 mCmd );
|
||||
UINT8 CH376SendCmdDatWaitInt( UINT8 mCmd, UINT8 mDat );
|
||||
UINT8 CH376DiskReqSense( void );
|
||||
UINT8 CH376DiskConnect( void );
|
||||
UINT8 CH376DiskMount( void );
|
||||
UINT8 CH376FileOpen( PUINT8 name );
|
||||
UINT8 CH376FileCreate( PUINT8 name );
|
||||
UINT8 CH376DirCreate( PUINT8 name );
|
||||
UINT8 CH376SeparatePath( PUINT8 path );
|
||||
UINT8 CH376FileOpenDir( PUINT8 PathName, UINT8 StopName );
|
||||
UINT8 CH376FileOpenPath( PUINT8 PathName );
|
||||
UINT8 CH376FileCreatePath( PUINT8 PathName );
|
||||
|
||||
#ifdef EN_DIR_CREATE
|
||||
UINT8 CH376DirCreatePath( PUINT8 PathName );
|
||||
UINT8 CH376FileErase( PUINT8 PathName );
|
||||
UINT8 CH376FileClose( UINT8 UpdateSz );
|
||||
UINT8 CH376DirInfoRead( void );
|
||||
UINT8 CH376DirInfoSave( void );
|
||||
UINT8 CH376ByteLocate( UINT32 offset );
|
||||
UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount );
|
||||
UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount );
|
||||
UINT8 CH376DiskCapacity( PUINT32 DiskCap );
|
||||
UINT8 CH376DiskQuery( PUINT32 DiskFre );
|
||||
UINT8 CH376SecLocate( UINT32 offset );
|
||||
UINT8 CH376DiskReadSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount );
|
||||
UINT8 CH376DiskWriteSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount );
|
||||
UINT8 CH376SecRead( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount );
|
||||
UINT8 CH376SecWrite( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount );
|
||||
#ifdef EN_DIR_CREATE
|
||||
UINT8 CH376DirCreatePath( PUINT8 PathName );
|
||||
#endif
|
||||
|
||||
#ifdef EN_LONG_NAME
|
||||
UINT8 CH376LongNameWrite( PUINT8 buf, UINT16 ReqCount );
|
||||
UINT8 CH376CheckNameSum( PUINT8 DirName );
|
||||
UINT8 CH376LocateInUpDir( PUINT8 PathName );
|
||||
UINT8 CH376GetLongName( PUINT8 PathName, PUINT8 LongName );
|
||||
UINT8 CH376CreateLongName( PUINT8 PathName, PUINT8 LongName );
|
||||
UINT8 CH376FileErase( PUINT8 PathName );
|
||||
UINT8 CH376FileClose( UINT8 UpdateSz );
|
||||
UINT8 CH376DirInfoRead( void );
|
||||
UINT8 CH376DirInfoSave( void );
|
||||
UINT8 CH376ByteLocate( UINT32 offset );
|
||||
UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount );
|
||||
UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount );
|
||||
|
||||
#ifdef EN_DISK_QUERY
|
||||
UINT8 CH376DiskCapacity( PUINT32 DiskCap );
|
||||
UINT8 CH376DiskQuery( PUINT32 DiskFre );
|
||||
#endif
|
||||
|
||||
UINT8 CH376SecLocate( UINT32 offset );
|
||||
|
||||
#ifdef EN_SECTOR_ACCESS
|
||||
UINT8 CH376DiskReadSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount );
|
||||
UINT8 CH376DiskWriteSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount );
|
||||
UINT8 CH376SecRead( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount );
|
||||
UINT8 CH376SecWrite( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount );
|
||||
#endif
|
||||
|
||||
#ifdef EN_LONG_NAME
|
||||
UINT8 CH376LongNameWrite( PUINT8 buf, UINT16 ReqCount );
|
||||
UINT8 CH376CheckNameSum( PUINT8 DirName );
|
||||
UINT8 CH376LocateInUpDir( PUINT8 PathName );
|
||||
UINT8 CH376GetLongName( PUINT8 PathName, PUINT8 LongName );
|
||||
UINT8 CH376CreateLongName( PUINT8 PathName, PUINT8 LongName );
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -547,6 +547,10 @@ config NSH_DISABLE_XD
|
|||
bool "Disable xd"
|
||||
default DEFAULT_SMALL
|
||||
|
||||
config NSH_DISABLE_CH376
|
||||
bool "Disable the ch376 demo."
|
||||
default n
|
||||
|
||||
config NSH_DISABLE_CH438
|
||||
bool "Disable the ch438 demo."
|
||||
default n
|
||||
|
|
|
@ -1450,6 +1450,10 @@ int nsh_foreach_var(FAR struct nsh_vtbl_s *vtbl, nsh_foreach_var_t cb,
|
|||
FAR void *arg);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BSP_USING_CH376) && !defined(CONFIG_NSH_DISABLE_CH376)
|
||||
int cmd_Ch376(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BSP_USING_CH438) && !defined(CONFIG_NSH_DISABLE_CH438)
|
||||
int cmd_Ch438(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
#endif
|
||||
|
|
|
@ -38,6 +38,19 @@
|
|||
|
||||
extern int FrameworkInit(void);
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_Ch376
|
||||
****************************************************************************/
|
||||
#if defined(CONFIG_BSP_USING_CH376) && !defined(CONFIG_NSH_DISABLE_CH376)
|
||||
extern void CH376Demo(void);
|
||||
int cmd_Ch376(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
{
|
||||
nsh_output(vtbl, "Hello, world!\n");
|
||||
CH376Demo();
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_Ch438
|
||||
****************************************************************************/
|
||||
|
|
|
@ -596,6 +596,10 @@ static const struct cmdmap_s g_cmdmap[] =
|
|||
{ "xd", cmd_xd, 3, 3, "<hex-address> <byte-count>" },
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BSP_USING_CH376) && !defined(CONFIG_NSH_DISABLE_CH376)
|
||||
{ "ch376", cmd_Ch376, 1, 1, "[ch376 demo cmd.]" },
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BSP_USING_CH438) && !defined(CONFIG_NSH_DISABLE_CH438)
|
||||
{ "ch438", cmd_Ch438, 1, 1, "[ch438 demo cmd.]" },
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue