APS Lab
/
BMS_3029
LTC6811 Battery Management System with ADuCM3029.
Revision 1:4dd3e328a30b, committed 2018-02-09
- Comitter:
- APS_Lab
- Date:
- Fri Feb 09 04:43:04 2018 +0000
- Parent:
- 0:f06ed53310a3
- Commit message:
- Improved for SPI.
Changed in this revision
--- a/LTC681x.cpp Wed Feb 07 08:26:04 2018 +0000 +++ b/LTC681x.cpp Fri Feb 09 04:43:04 2018 +0000 @@ -13,10 +13,10 @@ void wakeup_idle(uint8_t total_ic) { for (int i =0; i<total_ic; i++) { - //spi2_CS = 0; -// wait_ms(2); //Guarantees the isoSPI will be in ready mode + cs_low(); + wait_ms(2); //Guarantees the isoSPI will be in ready mode spi_read_byte(0xff); - //spi2_CS = 1; + cs_high(); } } @@ -24,9 +24,9 @@ void wakeup_sleep(uint8_t total_ic) { for (int i =0; i<total_ic; i++) { - //spi2_CS = 0; + cs_low(); delay_u(300); // Guarantees the LTC6813 will be in standby - //spi2_CS = 1; + cs_high(); delay_u(10); } } @@ -43,9 +43,9 @@ cmd_pec = pec15_calc(2, cmd); cmd[2] = (uint8_t)(cmd_pec >> 8); cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_array(4,cmd); - //spi2_CS = 1; + cs_high(); } //Generic function to write 68xx commands and write payload data. Function calculated PEC for tx_cmd data @@ -81,9 +81,9 @@ } - //spi2_CS = 0; + cs_low(); spi_write_array(CMD_LEN, cmd); - //spi2_CS = 1; + cs_high(); free(cmd); } @@ -107,9 +107,9 @@ cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_read(cmd, 4, data, (BYTES_IN_REG*total_ic)); //Read the configuration data of all ICs on the daisy chain into - //spi2_CS = 1; //rx_data[] array + cs_high(); //rx_data[] array for (uint8_t current_ic = 0; current_ic < total_ic; current_ic++) { //executes for each LTC681x in the daisy chain and packs the data //into the r_comm array as well as check the received Config data @@ -279,10 +279,10 @@ cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_array(4,cmd); // adc_state = spi_read_byte(0xFF); - //spi2_CS = 1; + cs_high(); return(adc_state); } @@ -302,7 +302,7 @@ cmd[2] = (uint8_t)(cmd_pec >> 8); cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_array(4,cmd); while ((counter<200000)&&(finished == 0)) { @@ -313,8 +313,8 @@ counter = counter + 10; } } - //spi2_CS = 1; - + cs_high(); + return(counter); } @@ -436,9 +436,9 @@ cmd[2] = (uint8_t)(cmd_pec >> 8); cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_read(cmd,4,data,(REG_LEN*total_ic)); - //spi2_CS = 1; + cs_high(); } @@ -515,9 +515,9 @@ cmd[2] = (uint8_t)(cmd_pec >> 8); cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_read(cmd,4,data,(REG_LEN*total_ic)); - //spi2_CS = 1; + cs_high(); } @@ -553,9 +553,9 @@ cmd[2] = (uint8_t)(cmd_pec >> 8); cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_read(cmd,4,data,(REG_LEN*total_ic)); - //spi2_CS = 1; + cs_high(); } @@ -1381,12 +1381,12 @@ cmd[2] = (uint8_t)(cmd_pec >> 8); cmd[3] = (uint8_t)(cmd_pec); - //spi2_CS = 0; + cs_low(); spi_write_array(4,cmd); for (int i = 0; i<9; i++) { spi_read_byte(0xFF); } - //spi2_CS = 1; + cs_high(); }
--- a/bms.cpp Wed Feb 07 08:26:04 2018 +0000 +++ b/bms.cpp Fri Feb 09 04:43:04 2018 +0000 @@ -4,6 +4,16 @@ SPI spi(D11, D12, D13); DigitalOut cs(D10); +void cs_low(void) +{ + cs=0; +} + +void cs_high(void) +{ + cs=1; +} + void delay_u(uint16_t micro) { wait_us(micro); @@ -29,9 +39,11 @@ uint8_t data[] //Array of bytes to be written on the SPI port ) { + //cs=0; for (uint8_t i = 0; i < len; i++) { spi.write((int8_t)data[i]); } + //cs=1; } /* @@ -45,14 +57,18 @@ uint8_t rx_len //Option: number of bytes to be read from the SPI port ) { + //cs=0; for (uint8_t i = 0; i < tx_len; i++) { spi.write(tx_Data[i]); } + //cs=1; + //cs=0; for (uint8_t i = 0; i < rx_len; i++) { rx_data[i] = (uint8_t)spi.write(0xFF); } + //cs=1; } @@ -60,6 +76,8 @@ uint8_t spi_read_byte(uint8_t tx_dat) { uint8_t data; + //cs=0; data = (uint8_t)spi.write(0xFF); + //cs=1; return(data); }
--- a/bms.h Wed Feb 07 08:26:04 2018 +0000 +++ b/bms.h Fri Feb 09 04:43:04 2018 +0000 @@ -1,3 +1,6 @@ +void cs_low(void); +void cs_high(void); + void delay_u(uint16_t micro); void delay_m(uint16_t milli);